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

160

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

Elitmiar
источник

Ответы:

212

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

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname
Фрэнк Хейкенс
источник
9
И как восстановить этот файл резервной копии. (.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 --
Андерсон Доррегарай Линарес
13
psql -U username -d database -1 -f your_dump.sql
rnaud
5
что вы имели в виду: abstract_file_path?
Bandungeuy
3
Я не уверен, почему за этот ответ проголосовали, люди нажимают +1, не проверяя вещи сами или не пытаясь. Проблема с этим ответом, которая делает его совершенно бесполезным, состоит в том, что данные решение / команды не экспортируют последовательности, созданные в таблице (первичный ключ), и поэтому импорт завершается неудачно. Я не знаю ни одной производственной базы данных PG, где бы не использовались первичные ключи с последовательностями. Это половина ответа, он не дает полного ответа на вопрос и требует дополнительной работы для экспорта / импорта одной таблицы.
user10664542
1
с немного другим поворотом sudo к этому я закончил с ошибкой разрешения на дамп файла (достаточно логично, так как у пользователя postgres нет доступа на запись в мои каталоги), и у меня была ошибка неизвестного флага для --ignore-version. Ответ Прашанта Кумара, который проще, сработал для меня.
JL Peyret
84

Если вы находитесь на 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

Шри Харша Каппала
источник
1
Что делать, если вы хотите, чтобы все таблицы, без указания имени каждого?
Шекейн
3
Просто удалите опцию -t! pg_dump -d <database_name> > file.sql
Шри Харша Каппала
4
Я не знаю, почему опция -d недопустима для psql9.3, и данная команда не работает для меня. Один из них - pg_dump -U username db_name -t table_name> fileName .
Серкан Кучукбай
pg_dump -t <table_name> <database_name> > file.sql
Шрирам
@ user10664542: Пожалуйста, прочтите руководство, особенно этот раздел: «Для этой цели« таблица »включает в себя представления, материализованные представления, последовательности и сторонние таблицы».
Фрэнк Хейкенс
42

pg_dump -h localhost -p 5432 -U postgres -d mydb -t my_table> backup.sql

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

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

Прашант Кумар
источник
Я не уверен, почему за этот ответ проголосовали, люди нажимают +1, не проверяя вещи сами или не пытаясь. Проблема с этим ответом, которая делает его совершенно бесполезным, состоит в том, что данные решение / команды не экспортируют последовательности, созданные в таблице (первичный ключ), и поэтому импорт завершается неудачно. Я не знаю ни одной производственной базы данных PG, где бы не использовались первичные ключи с последовательностями. Это половина ответа, он не дает полного ответа на вопрос и требует дополнительной работы для экспорта / импорта одной таблицы.
user10664542
как отмечалось выше, у меня есть сильное подозрение, что user10664542, без каких-либо SO postgres ответов на его имя, здесь находится за пределами его глубины. в то время как последовательность действительно приносит дополнительные осложнения, на подобные ответы достаточно возражений, что люди, вероятно, заставили их работать, даже если им пришлось корректировать последовательность после факта. Если бы мне пришлось восстанавливать свой дамп, я бы искал способы обновить последний идентификатор последовательности из a max(id)на моей таблице. Это ответ, который работал, и я уверен, глядя на сгенерированный SQL, что я мог бы восстановить его.
JL Peyret
9

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

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

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

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

Франк Дернонкур
источник
2

В дополнение к ответу Фрэнка Хайкена, если вы хотите использовать 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флаг, потому что он устарел.

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