Вопрос: 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

Что может быть неправильным?


62
2018-06-14 16:15


Источник


Попробуйте импортировать дамп на том же компьютере, который сгенерировал его. Также проверьте версии Postgres. - Hank Gay
Я не могу попробовать импортировать его на том же компьютере, потому что это производственная машина. Любая идея, что еще я могу сделать? - gruszczy
Это решение может также иметь отношение к некоторым людям: stackoverflow.com/questions/42433414/... - Muhammad Hannan


Ответы:


Вы демпинг в формате sql, который был разработан для подачи psql. Это не распознается pg_restore.

cat db.txt | psql dbname

должен сделать трюк


87
2018-06-14 16:26



или psql dbname < db.txt ;) - Aleksey Deryagin


pg_dump по умолчанию создает sql commmands, необходимые для воссоздания данных. Чтобы восстановить его, вам просто нужно вызвать psql (не pg_restore ) с файлом в качестве входа. pg_restore используется только для двоичного (не по умолчанию и менее обычного не рекомендуется) формата pg_dump, Прочтите документы,

Обновление: pg_dump бинарные форматы (-Fc  -Ft), которые должны использоваться с pg_restore все в порядке и предлагают дополнительную гибкость. Но они менее стандартны (не SQL), менее приспособлены для импорта из некоторых инструментов (например, php frontend) или манипулируют текстовым редактором и немного менее переносимы для других версий и даже других баз данных. Для резервных копий я придерживался стандартного формата. Для других сценариев опция двоичного + pg_restore может быть одинаковой или более подходящей.

Суть заключается в том, что в Postgresql, в типичный сценарий, резервное копирование обычно выполняется pg_dump (обычная) и восстановление с помощью стандартного клиента командной строки (PSQL).


23
2018-06-14 16:22



[OT] Я прошу отличаться в отношении «не рекомендованного» статуса пользовательского формата вывода - предложение «Это самый гибкий формат, в котором он позволяет переупорядочивать данные загрузки, а также определения объектов ...» из руководства, похоже для меня как вполне одобрение. - Milen A. Radev
Я не согласен, что «не рекомендуется» было преувеличением. Но «самый гибкий» не обязательно означает «наиболее рекомендуемый». Уточнено. - leonbloy


Попробуйте пройти --format=c вариант pg_dump, Это позволит pg_restore чтобы восстановить его.


12
2018-06-14 16:23



Будет ли кто-нибудь из этого изменить, чтобы объяснить, почему? В принятом ответе объясняется, что это будет работать :-)
@skrafi: Каков ваш смысл? - psmears
извините, скопируйте неправильный вывод, правый pg_restore: [archiver] did not find magic string in file header поэтому это не работает для простого sql-дампа - skrafi
@skrafi: Я не уверен, что вы имеете в виду. Если вы используете pg_dump --format=c ...> archivefile, а затем использовать pg_restore на archivefile, то (по крайней мере, когда я тестировал его только сейчас), он отлично работает. Может быть, ваш файл каким-то образом поврежден? Или вы попали в конкретную ошибку? - psmears


Это то, что я сделал бы для резервного копирования старой базы данных и восстановления

Чтобы создать резервную копию базы данных

pg_dump --format=c olddb_name > db_dump_file.dump

Чтобы восстановить эту резервную копию

pg_restore -v -d newdb_name db_dump_file.dump

Подробнее о pg_dump а также pg_restore


4
2018-02-27 09:03





Для пользователей Windows

type db.txt | psql --username="YOURNAME" dbname

Работает как шарм


3
2018-04-15 17:59





Вы можете что-то сделать для MySQL SOURCE команда:

psql dbname

Затем в терминале postgresql:

\i filename

1
2018-01-03 10:49





cat dumpFileName | psql -h ip -d dbName -U userName -W


0
2018-04-11 07:06



Это обычно полезно, если вы объясните, что это делает и почему это может помочь. - Falcon Momot


Это сообщение об ошибке также может означать, что в файле резервной копии есть что-то неладное (или ваши предположения об этом).

В одном случае я установил файл резервной копии в контейнер Docker и попытался восстановить его, но он не удался does not appear to be a valid archive, И фактически, файл был пуст, потому что mount был выполнен неправильно.


0
2018-02-20 15:54