1
У меня есть база данных Postgres, я пытаюсь сделать резервную копию таблицы с:Postgres резервное копирование и перезапись одна таблица
pg_dump --data-only --table=<table> <db> > dump.sql
Тогда дней спустя я пытаюсь переписать его (в основном хотят, чтобы стереть все данные и добавить данные из моей свалки):
psql -d <db> -c --table=<table> < dump.sql
Но оно не перезаписывается, оно добавляет к нему, не удаляя существующие данные.
Любые советы были бы замечательными, спасибо!
Этого следовало ожидать - дамп - это всего лишь sql 'COPY'. Вы можете предшествовать загрузке данных с помощью команды «TRUNCATE
В качестве альтернативы запустите 'pg_dump' с' --clean' для вывода команд для очистки (удаления) объектов базы данных до вывода команд для их создания. " –
ответ
У вас есть в основном два варианта, в зависимости от ваших данных и ограничений fkey.
Если нет никаких ключевых слов для таблицы, то лучше всего урезать таблицу перед ее загрузкой. Обратите внимание, что усечение ведет себя немного странно в сделках, так что лучше всего сделать это (в блоке транзакции):
Это позволит избежать другой транзакции, видя пустой стол.
Если у вас есть fkeys, вы можете загрузить во временную таблицу, а затем выполнить upsert. В этом случае вы все равно хотите заблокировать таблицу, чтобы избежать состояния гонки, если это возможно и другие операции может потребоваться запись в таблице (также в блоке транзакции):
Этап 3 немного сложный. Вы, возможно, потребуется задать отдельный вопрос об этом, но в основном вы будете иметь два этапа (и записать это в консультации с Docs):
Надеюсь, что это поможет.
источник
2016-05-06 04:18:27
Смежные вопросы