Как создать резервную копию одной таблицы в базе данных postgres?

Есть ли способ создать резервную копию одной таблицы в базе данных с помощью postgres? И как? Это также работает с командой pg_dump?


person Elitmiar    schedule 10.09.2010    source источник


Ответы (7)


Используйте --table, чтобы указать pg_dump, какую таблицу нужно резервировать:

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname
person Frank Heikens    schedule 10.09.2010
comment
И как восстановить этот файл резервной копии. (.backup), я использовал pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup", но вышло: pg_restore: [tar archiver] corrupt tar header found in -- - person Anderson Dorregaray Linares; 05.12.2016
comment
что вы имели в виду: abstract_file_path? - person bandungeuy; 23.09.2018
comment
Я не уверен, почему за этот ответ проголосовали, люди нажимают +1, не проверяя сами и не пытаясь. Проблема с этим ответом, который делает его совершенно бесполезным, заключается в том, что данное решение / команды не экспортируют последовательности, созданные в таблице (первичный ключ), и поэтому импорт не выполняется. Я не знаю ни одной производственной базы данных PG, где бы не использовались первичные ключи с последовательностями. Это половина ответа, не дает исчерпывающего ответа на вопрос и требует дополнительной работы для экспорта / импорта одной таблицы. - person user10664542; 04.12.2019
comment
с немного другим поворотом sudo к этому я получил ошибку разрешения на дампе файла (достаточно логично, поскольку у пользователя postgres нет доступа на запись в мои каталоги), и у меня была ошибка неизвестного флага для --ignore-version. Ответ Прашанта Кумара, который проще, сработал для меня. - person JL Peyret; 28.12.2019
comment
Если вы хотите использовать pg_restore, вам нужно добавить флаг -c, -d или -t. Как объясняется в Postgres Docs, --format plain (по умолчанию, краткая форма -p), не работает с pg_restore. Например. добавьте -Fc в pg_dump и -Fc в pg_restore, чтобы указать формат дампа. - person Alex; 12.03.2020
comment
это работает довольно хорошо для PG11, но позаботьтесь о правильном pg_dump приложении. На моем сервере Centos 7 я нашел его в каталоге /usr/pgsql-11/bin - person Juan Salvador; 17.08.2020
comment
@bandungeuy abstract_file_path означает путь в вашей локальной системе, по которому вы хотите, чтобы вывод шел. Если вы его опустите, он перейдет в стандартный вывод. - person Eric LeBlanc; 29.09.2020

Если вы используете Ubuntu,

  1. Войдите в систему под своим пользователем postgres sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

Убедитесь, что вы выполняете команду, в которой пользователь postgres имеет права на запись (пример: /tmp)

Изменить

Если вы хотите сбросить .sql на другой компьютер, вам может потребоваться пропустить информацию о владельце, сохраняемую в файле .sql.

Вы можете использовать pg_dump --no-owner -d <database_name> -t <table_name> > file.sql

person Sri Harsha Kappala    schedule 13.07.2015
comment
Что, если вам нужны все таблицы без указания имени каждой? - person shekeine; 17.07.2015
comment
Просто удалите опцию -t! pg_dump -d <database_name> > file.sql - person Sri Harsha Kappala; 17.07.2015
comment
Я не знаю, почему, но опция -d недействительна для psql9.3, и данная команда у меня не работает. Рабочий - pg_dump -U username db_name -t table_name ›fileName. - person serkan kucukbay; 15.11.2016
comment
@ user10664542: Прочтите руководство, особенно этот раздел: для этой цели «таблица» включает представления, материализованные представления, последовательности и сторонние таблицы. - person Frank Heikens; 04.12.2019

pg_dump -h localhost -p 5432 -U postgres -d mydb -t моя_таблица> backup.sql

Вы можете сделать резервную копию одной таблицы, но я бы предложил сделать резервную копию всей базы данных, а затем восстановить любую таблицу, которая вам нужна. Всегда хорошо иметь резервную копию всей базы данных.

9 способов использования pg_dump

person Prashant Kumar    schedule 14.10.2014
comment
Я не уверен, почему за этот ответ проголосовали, люди нажимают +1, не проверяя сами и не пытаясь. Проблема с этим ответом, который делает его совершенно бесполезным, заключается в том, что данное решение / команды не экспортируют последовательности, созданные в таблице (первичный ключ), и поэтому импорт не выполняется. Я не знаю ни одной производственной базы данных PG, где бы не использовались первичные ключи с последовательностями. Это половина ответа, не дает исчерпывающего ответа на вопрос и требует дополнительной работы для экспорта / импорта одной таблицы. - person user10664542; 04.12.2019
comment
как отмечалось выше, у меня есть сильное подозрение, что user10664542, без каких-либо ответов SO postgres на его имя, здесь не в своей глубине. Хотя последовательность действительно приносит дополнительные сложности, достаточно голосов за аналогичные ответы, что люди, вероятно, заставили их работать, даже если им пришлось корректировать последовательность постфактум. если бы мне пришлось восстанавливать дамп, я бы искал способы обновить последний идентификатор последовательности из max(id) в моей таблице. это ответ, который сработал, и я уверен, глядя на сгенерированный sql, что я мог бы его восстановить. - person JL Peyret; 28.12.2019

Если вы предпочитаете графический интерфейс пользователя, вы можете использовать pgAdmin III (Linux / Windows / OS X). Просто щелкните правой кнопкой мыши по нужной таблице и выберите «Резервное копирование». Он создаст для вас команду pg_dump.

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

person Franck Dernoncourt    schedule 31.03.2016

В дополнение к ответу Фрэнка Хайкена, если вы хотите использовать операторы INSERT вместо copy from stdin, вы должны указать флаг --inserts

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname

Обратите внимание, что я пропустил флаг --ignore-version, потому что он устарел.

person user3207874    schedule 24.05.2019
comment
Я не уверен, почему за этот ответ проголосовали, люди нажимают +1, не проверяя сами и не пытаясь. Проблема с этим ответом, который делает его совершенно бесполезным, заключается в том, что данное решение / команды не экспортируют последовательности, созданные в таблице (первичный ключ), и поэтому импорт не выполняется. Я не знаю ни одной производственной базы данных PG, где бы не использовались первичные ключи с последовательностями. Это половина ответа, не дает исчерпывающего ответа на вопрос и требует дополнительной работы для экспорта / импорта одной таблицы. - person user10664542; 04.12.2019

вы можете использовать эту команду

pg_dump --table=yourTable --data-only --column-inserts yourDataBase > file.sql

вы должны изменить yourTable, yourDataBase для вашего случая

person x-rw    schedule 03.09.2020

Я пытался запустить pg_dump из командной строки psql, и мне не удалось отследить выходной файл где-либо в моем ящике ubuntu 20.04. Я пытался найти по find / -name "myfilename.sql".

Вместо этого, когда я попробовал pg_dump из / home / ubuntu, я нашел свой выходной файл в / home / ubuntu.

person user15272384    schedule 24.02.2021