pg_restore: [архиватор] не нашел волшебную строку в заголовке файла

13

Я использую PostgreSQL 9.1 и хочу восстановить файлы резервных копий, созданные с помощью pg_dump:

sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name

Эта команда генерирует действительный файл sql, который начинается с удаления любых существующих объектов базы данных, затем генерирует все таблицы, индексирует, последовательности и т. Д. И, наконец, вставляет данные.

Когда я пытаюсь восстановить сгенерированный файл резервной копии с помощью: (разрывы строк добавлены только для отображения)

sudo pg_restore 
    -d database_name -h 127.0.0.1 -U postgres
    --format=c --clean --create out.sql

это терпит неудачу и печатает:

pg_restore: [archiver] did not find magic string in file header

В чем причина этого?

Maja
источник

Ответы:

19

Вы восстанавливаете с помощью, pg_restore --format=c ...но это pg_dumpне было сделано --format=c, это было сделано по умолчанию, в простом формате.

С pg_dumpmanpage:

  -F format, --format=format
       Selects the format of the output.  format can be one of the
       following:

       p, plain
           Output a plain-text SQL script file (the default).

Дамп в простом формате должен быть направлен непосредственно в psqlинструмент командной строки, pg_restoreне знает, что это такое, что является причиной этого сообщения об ошибке: не нашел волшебную строку в заголовке файла .

Вы можете посмотреть непосредственно на файл дампа more out.sqlв оболочке, и вы увидите читаемые команды SQL. Восстановите это с psql -f out.sql [other options]. Возможно, вы сначала захотите создать целевую базу данных, так как эта --createопция отсутствует в pg_dumpвызове.

С другой стороны, вы можете повторно вызвать дамп, добавив --format=cего параметры. Тогда это будет наоборот: pg_restoreдолжен использоваться для интерпретации файла дампа в пользовательском формате.

Даниэль Верите
источник
0

Одна из возможных проблем - ваш файл данных обрезан. Проверьте, загружаете ли вы полный файл, сравнив его размеры.

Стерлинг кобб
источник
0

Если вы используете git-lfs, убедитесь, что у вас есть фактический файл, а не указатель!

Мехмет
источник