pg_restore non riesce su dump compresso zlib


1

Creato un dump di un database postgresql (Windows versione 9.3 o 9.4) con il comando:

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

ripristinandolo con psql o pg_restore fallisce:

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

cercando di verificare il file:

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

Quindi, come posso ripristinare questo dump compresso?

Risposte:


1

Il file che hai creato è un file di testo semplice gzip. Per ripristinarlo, usa qualcosa come

zcat db.dump | psql ...

Se si desidera un dump non di testo normale, è necessario utilizzare l'opzione -Fc durante la corsa pg_dump.


Esatto, si tratta di un file di testo semplice con gzip, anche se ho già dimostrato che zcat fallisce. La macchina host ora è morta e ho bisogno di recuperare i dati, quindi la mia unica opzione è di ripristinare / decomprimere questo file
macns

1

Risposta breve: esegui fixgz http://www.gzip.org/fixgz.zip su discarica compressa.

fixgz.exe bad.gz fixed.gz

Risposta lunga: Quindi se hai usato pg_dump con --compresss o -Z senza specificare l'opzione di formato personalizzato (-Fc), quello che ottieni è un file compresso in modalità ASCII invece che in modalità BINARY.

Citando da http://www.gzip.org/#faq1

Se hai trasferito un file in modalità ASCII e non hai più   accesso all'originale, puoi provare il programma fixgz per rimuovere il   byte CR aggiuntivi (ritorno a capo) inseriti dal trasferimento. Un Windows   Il binario 9x / NT / 2000 / ME / XP è qui. Ma non c'è assolutamente alcuna garanzia   che questo risolverà davvero il tuo file. Conclusione: mai trasferire   file binari in modalità ASCII.


Sia -Fc che -Z senza -Fc producono un file binario. Uno strumento di trasferimento utilizzato per copiare quel file da una macchina all'altra deve lasciarlo non modificato. Lo strumento e l'opzione che hai usato per copiare il file, che la domanda non menziona, è apparentemente la causa principale dell'errore qui.
Daniel Vérité
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.