1

Создал дамп базы данных postgresql (windows version 9.3 или 9.4) с помощью команды:

C:\>pg_dump -U user -Z 6 database > db.dump

восстановить его с помощью psql или pg_restore не удалось:

C:\>psql.exe -U postgres db < db.dump  
ERROR: invalid byte sequence for encoding "UTF8": 0x8b

C:\>pg_restore.exe -U postgres -d db < db.dump  
pg_restore: [archiver] input file does not appear to be a valid archive

C:\>pg_restore.exe -U postgres -d db --format=c db.dump
pg_restore: [archiver] did not find magic string in file header

пытаемся проверить файл:

user:~$ file db.dump
db.dump: gzip compressed data, from NTFS filesystem (NT)

user:~$ zcat db.dump
gzip: db.dump: invalid compressed data--format violated

Так как мне восстановить этот сжатый дамп?

2 ответа2

1

Краткий ответ: запустите fixgz http://www.gzip.org/fixgz.zip для сжатого дампа.

fixgz.exe bad.gz fixed.gz

Длинный ответ: так что если вы использовали pg_dump с --compresss или -Z без указания пользовательского параметра формата (-Fc), то вы получите сжатый файл в режиме ASCII вместо режима BINARY.

Цитирование с http://www.gzip.org/#faq1

Если вы передали файл в режиме ASCII и у вас больше нет доступа к оригиналу, вы можете попробовать программу fixgz, чтобы удалить дополнительные байты CR (возврат каретки), вставленные при передаче. Двоичный файл Windows 9x/NT/2000/ME/XP находится здесь. Но нет абсолютно никакой гарантии, что это на самом деле исправит ваш файл. Вывод: никогда не передавайте двоичные файлы в режиме ASCII.

1

Созданный вами файл представляет собой обычный текстовый файл в формате GZIP. Чтобы восстановить это, используйте что-то вроде

zcat db.dump | psql ...

Если вам нужен дамп не в текстовом формате, вы должны использовать опцию -Fc при запуске pg_dump .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .