Я использовал pg_dump на одном компьютере и скопировал файл результатов на другой, где попытался его восстановить. Я считаю, что схема такая же. Однако я получаю:
pg_restore: [archiver] input file does not appear to be a valid archive
Я проделал следующие операции:
pg_dump -a -f db.txt dbname
и:
pg_restore -a -d dbname db.txt
Что может быть не так?
Вы выполняете дамп в простом формате sql, который был разработан для подачи в psql. Это не распознается pg_restore.
cat db.txt | psql dbname
должен сделать трюк
pg_dump
по умолчанию создает команды sql, необходимые для воссоздания данных. Чтобы восстановить его, вам просто нужно вызвать psql
(не pg_restore
) с файлом в качестве входных данных. pg_restore
используется только для двоичного файла (не по умолчанию и менее обычный не рекомендуется) формат pg_dump
. Прочтите документы.
Обновление: pg_dump
двоичные форматы (-Fc
-Ft
), которые будут использоваться с pg_restore
в порядке и предлагают дополнительную гибкость. Но они менее стандартны (не SQL), менее подходят для импорта из некоторых инструментов (например, из интерфейса php) или манипулирования с помощью текстового редактора, и немного менее переносимы для других версий и даже других баз данных. Для резервных копий я бы придерживался простого формата по умолчанию. Для других сценариев параметр binary + pg_restore может быть одинаково или более подходящим.
Смысл в том, что в Postgresql в типичный сценарий, резервное копирование обычно выполняется pg_dump (простой) и восстановление с помощью стандартного клиента командной строки (psql).
Попробуйте передать --format=c
возможность pg_dump
. Это позволит pg_restore
восстановить его.
Вот что я сделал бы для резервного копирования моей старой базы данных и восстановления
Для резервного копирования вашей базы данных
pg_dump --format=c olddb_name > db_dump_file.dump
Чтобы восстановить эту резервную копию
pg_restore -v -d newdb_name db_dump_file.dump
Подробнее на pg_dump и pg_restore
Для пользователей Windows попробуйте
type db.txt | psql --username="YOURNAME" dbname
Работает как шарм
Вы можете что-то сделать с MySQL SOURCE
команда:
psql dbname
Затем в терминале postgresql:
\i filename
cat dumpFileName | psql -h ip -d имя_бД -U имя_пользователя -W
Это сообщение об ошибке также может означать, что что-то не так с файлом резервной копии (или вашими предположениями на этот счет).
В одном случае я смонтировал файл резервной копии в контейнере Docker и попытался восстановить, но это не удалось. does not appear to be a valid archive
. И на самом деле файл оказался пустым, потому что монтирование было выполнено некорректно.