Назад | Перейти на главную страницу

pg_dump и pg_restore: входной файл не является допустимым архивом

Я использовал 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. И на самом деле файл оказался пустым, потому что монтирование было выполнено некорректно.