Восстановление базы данных postgres зависает — без ошибок

#postgresql

#postgresql

Вопрос:

В настоящее время я пытаюсь восстановить базу данных из резервной копии, созданной pg_dump (размером ~ 100 мб) из файла tar.

Однако попытка восстановления с pg_restore -U postgres -f "example.tar"

просто продолжает зависать и, похоже, никогда не работает.

Каков наилучший способ попытаться диагностировать и устранить проблему?

Комментарии:

1. Проблема -f заключается в том, чтобы указать файл, который вы хотите восстановить, в виде обычного текстового SQL-скрипта из файла дампа. Это то, что вы хотите сделать? Если не потерять -f , а также указать -d для базы данных, которую вы хотите восстановить. Дополнительная информация здесь pg_restore

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