pg_restore falha no dump comprimido do zlib

1

Criado um dump de um banco de dados postgresql (windows versão 9.3 ou 9.4) com o comando:

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

a restauração com psql ou pg_restore falha:

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

tentando verificar o arquivo:

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

Então, como restaurar esse dump comprimido?

    
por macns 05.05.2016 / 19:24

2 respostas

1

Resposta curta: execute o link no dump comprimido.

fixgz.exe bad.gz fixed.gz

Resposta longa: Portanto, se você usou pg_dump com --compresss ou -Z sem especificar a opção de formato personalizado (-Fc), o que você realmente obtém é um arquivo compactado no modo ASCII, em vez do modo BINARY.

Citações do link

If you have transferred a file in ASCII mode and you no longer have access to the original, you can try the program fixgz to remove the extra CR (carriage return) bytes inserted by the transfer. A Windows 9x/NT/2000/ME/XP binary is here. But there is absolutely no guarantee that this will actually fix your file. Conclusion: never transfer binary files in ASCII mode.

    
por 09.05.2016 / 12:10
1

O arquivo que você criou é um arquivo de texto simples gzipado. Para restaurar isso, use algo como

zcat db.dump | psql ...

Se você deseja um despejo sem texto, use a opção -Fc ao executar pg_dump .

    
por 05.05.2016 / 19:34