2016-05-05 4 views
1

У меня есть база данных Postgres, я пытаюсь сделать резервную копию таблицы с:Postgres резервное копирование и перезапись одна таблица

pg_dump --data-only --table=<table> <db> > dump.sql 

Тогда дней спустя я пытаюсь переписать его (в основном хотят, чтобы стереть все данные и добавить данные из моей свалки):

psql -d <db> -c --table=<table> < dump.sql 

Но оно не перезаписывается, оно добавляет к нему, не удаляя существующие данные.

Любые советы были бы замечательными, спасибо!

+0

Этого следовало ожидать - дамп - это всего лишь sql 'COPY'. Вы можете предшествовать загрузке данных с помощью команды «TRUNCATE

» или добавить ее в начало файла dump.sql. – jmelesky

+1

В качестве альтернативы запустите 'pg_dump' с' --clean' для вывода команд для очистки (удаления) объектов базы данных до вывода команд для их создания. " –

ответ

1

У вас есть в основном два варианта, в зависимости от ваших данных и ограничений fkey.

Если нет никаких ключевых слов для таблицы, то лучше всего урезать таблицу перед ее загрузкой. Обратите внимание, что усечение ведет себя немного странно в сделках, так что лучше всего сделать это (в блоке транзакции):

  1. Замок стол
  2. Округление
  3. нагрузки

Это позволит избежать другой транзакции, видя пустой стол.

Если у вас есть fkeys, вы можете загрузить во временную таблицу, а затем выполнить upsert. В этом случае вы все равно хотите заблокировать таблицу, чтобы избежать состояния гонки, если это возможно и другие операции может потребоваться запись в таблице (также в блоке транзакции):

  1. Загрузка данных во временную таблицу
  2. Заблокировать таблицу адресатов (необязательно, см. Выше)
  3. используйте записываемый cte для «upsert» в таблице.
  4. Используйте отдельную инструкцию удаления для удаления данных из таблицы.

Этап 3 немного сложный. Вы, возможно, потребуется задать отдельный вопрос об этом, но в основном вы будете иметь два этапа (и записать это в консультации с Docs):

  1. Обновление существующих записей
  2. Вставка несуществующие записи

Надеюсь, что это поможет.

Смежные вопросы