it-swarm.com.de

pg_restore: [archiver] hat keine magische Zeichenfolge im Dateikopf gefunden

Ich verwende PostgreSQL 9.1 und möchte Sicherungsdateien wiederherstellen, die mit pg_dump:

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

Dieser Befehl generiert eine gültige SQL-Datei, die mit dem Löschen vorhandener Datenbankobjekte beginnt, dann alle Tabellen generiert, indiziert, sequenziert usw. und schließlich Daten einfügt.

Wenn ich versuche, die generierte Sicherungsdatei wiederherzustellen mit: (Zeilenumbrüche nur zu Anzeigezwecken hinzugefügt)

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

es schlägt fehl und druckt:

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

Was ist der Grund dafür?

13
maja

Sie stellen mit pg_restore --format=c ... Wiederher, aber pg_dump Wurde nicht mit --format=c Ausgeführt, sondern mit dem Standardformat plain.

Von der Manpage pg_dump:

  -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).

Ein Speicherauszug im einfachen Format sollte direkt an das Befehlszeilentool psql übergeben werden. pg_restore Weiß nicht, was es ist. Dies ist der Grund für diese Fehlermeldung: hat keine magische Zeichenfolge im Dateikopf gefunden .

Sie können die Dump-Datei mit more out.sql Direkt in der Shell anzeigen und sehen lesbare SQL-Befehle. Stellen Sie es mit psql -f out.sql [other options] Wiederher. Möglicherweise möchten Sie zuerst die Zieldatenbank erstellen, da die Option --create Im Aufruf von pg_dump Nicht vorhanden ist.

Auf der anderen Seite können Sie den Speicherauszug erneut aufrufen und --format=c Zu seinen Optionen hinzufügen. Dann wäre das Gegenteil: pg_restore Muss verwendet werden, um eine Dump-Datei im benutzerdefinierten Format zu interpretieren.

19
Daniel Vérité

Ein mögliches Problem ist, dass Ihre Datendatei abgeschnitten ist. Überprüfen Sie, ob Sie die vollständige Datei herunterladen, indem Sie die Dateigrößen vergleichen.

0
Sterling Cobb

Wenn Sie git-lfs verwenden, stellen Sie sicher, dass Sie die tatsächliche Datei und nicht den Zeiger haben!

0
mehmet