O 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

restaurá-lo 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 restauro esse dump comprimido?

Respostas:


1

O arquivo que você criou é um arquivo de texto sem formatação gzipado. Para restaurar isso, use algo como

zcat db.dump | psql ...

Se você quiser um despejo sem texto, você deve usar a opção -Fc quando correndo pg_dump.


Correto, é um arquivo de texto puro gzipado, embora eu já tenha mostrado que o zcat falha. A máquina host agora está inativa e eu preciso recuperar os dados para que minha única opção seja restaurar / descompactar esse arquivo
macns

1

Resposta curta: execute o fixgz http://www.gzip.org/fixgz.zip 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ção de http://www.gzip.org/#faq1

Se você transferiu um arquivo no modo ASCII e não tiver mais   acesso ao original, você pode tentar o programa fixgz para remover o   extra CR (retorno de carro) bytes inseridos pela transferência. Um Windows   Binário 9x / NT / 2000 / ME / XP está aqui. Mas não há absolutamente nenhuma garantia   que isso realmente consertará seu arquivo. Conclusão: nunca transfira   arquivos binários no modo ASCII.


Ambos -Fc e -Z sem -Fc produzem um arquivo binário. Uma ferramenta de transferência usada para copiar esse arquivo de uma máquina para outra deve deixá-lo inalterado. A ferramenta e opção que você usou para copiar o arquivo, que a questão não menciona, aparentemente é a causa raiz da falha aqui.
Daniel Vérité
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.