#postgresql
#postgresql
Вопрос:
В настоящее время я пытаюсь восстановить базу данных из резервной копии, созданной pg_dump (размером ~ 100 мб) из файла tar.
Однако попытка восстановления с pg_restore -U postgres -f "example.tar"
просто продолжает зависать и, похоже, никогда не работает.
Каков наилучший способ попытаться диагностировать и устранить проблему?
Комментарии:
1. Проблема
-f
заключается в том, чтобы указать файл, который вы хотите восстановить, в виде обычного текстового SQL-скрипта из файла дампа. Это то, что вы хотите сделать? Если не потерять-f
, а также указать-d
для базы данных, которую вы хотите восстановить. Дополнительная информация здесь pg_restore2. спасибо, я просто пытаюсь восстановить из файла tar не в существующую базу данных, т.Е. Файл должен создать базу данных и загрузить данные
3. Но, как я уже сказал выше
-f
, будет восстановлено в указанный файл, а не в базу данных. Итак, вы пытаетесь восстановитьexample.tar
, не включая файл, из которого вы восстанавливаете, что, я предполагаюexample.tar
. Отсюда и зависание. Даже если файл дампа настроен наCREATE DATABASE
, вам нужно будет подключиться к другой базе данных-d
, чтобы это произошло. Все это изложено в ссылке, которую я опубликовал, проведите там некоторое время.
Ответ №1:
Он ожидает ввода в stdin.
-f
указывает выходной файл, а не входной файл. Без ввода он ожидает ввода в stdin. Если вы введете ctrl-d
, чтобы завершить ввод, он скажет что-то вроде pg_restore: error: input file is too short (read 0, expected 5)
.
Правильный вызов…
pg_restore --dbname=DatabaseName -Upostgres --format=tar example.tar
--dbname
это имя базы данных для восстановления. Если он не существует, добавьте --create
, чтобы указать pg_restore
, чтобы создать его.
Это --format=tar
не является строго необходимым, pg_restore
можно угадать тип файла, но зачем рисковать?
Смотрите Документы pg_restore .
Комментарии:
1. Это одна из самых запутанных частей программного обеспечения:
pg_restore: error: one of -d/--dbname and -f/--file must be specified
2. Почему по какой-то причине вам нужно указать имя базы данных ИЛИ имя выходного файла, какова связь между ними?
3.@Drachenfels из документации: pg_restore может работать в двух режимах. Если указано имя базы данных, pg_restore подключается к этой базе данных и восстанавливает содержимое архива непосредственно в базу данных. В противном случае создается скрипт, содержащий команды SQL, необходимые для восстановления базы данных, и записывается в файл или стандартный вывод. Вывод этого скрипта эквивалентен текстовому формату вывода pg_dump .
-f
требуется, потомуpg_dump
что обычно выполняется запись в нетекстовый формат.