Frage pg_dump und pg_restore: Eingabedatei scheint kein gültiges Archiv zu sein


Ich habe pg_dump auf einer Maschine benutzt und die Ergebnisdatei in eine andere kopiert, wo ich versucht habe, sie wiederherzustellen. Ich glaube Schema ist das gleiche. Ich bekomme jedoch:

pg_restore: [archiver] input file does not appear to be a valid archive

Ich habe folgende Operationen durchgeführt:

pg_dump -a -f db.txt dbname

und:

pg_restore -a -d dbname db.txt

Was könnte falsch sein?


62
2018-06-14 16:15


Ursprung


Versuchen Sie, den Dump auf demselben Computer zu importieren, auf dem er generiert wurde. Überprüfen Sie auch die Postgres-Versionen. - Hank Gay
Ich kann nicht versuchen, es auf derselben Maschine zu importieren, weil es eine Produktionsmaschine ist. Irgendeine Idee, was kann ich noch tun? - gruszczy
Diese Lösung kann auch für einige Leute relevant sein: stackoverflow.com/questions/42433414/... - Muhammad Hannan


Antworten:


Sie werden im einfachen sql-Format gespeichert, das für psql vorgesehen ist. Dies wird von pg_restore nicht erkannt.

cat db.txt | psql dbname

sollte den Trick machen


88
2018-06-14 16:26



oder psql dbname < db.txt ;) - Aleksey Deryagin


pg_dump erstellt standardmäßig die sql-Befehle, die zum erneuten Erstellen der Daten erforderlich sind. Um es wiederherzustellen, müssen Sie nur aufrufen psql (nicht pg_restore ) mit der Datei als Eingabe. pg_restore ist nur für die Binärdatei zu verwenden (nicht Standard und weniger üblich nicht empfohlen) Format von pg_dump. Lies das Dokumente.

Update: Die pg_dump Binärformate (-Fc  -Ft) die mit verwendet werden sollen pg_restore sind in Ordnung und bieten etwas mehr Flexibilität. Aber sie sind weniger Standard (nicht SQL), weniger geeignet für den Import von einigen Tools (zB ein PHP-Frontend) oder manipulieren mit einem Texteditor, und ein wenig weniger portabel zu anderen Versionen und sogar anderen Datenbanken. Für Backups würde ich beim Standard-Standardformat bleiben. Für andere Szenarien kann die Option binary + pg_restore gleich oder besser geeignet sein.

Der Punkt zu behalten ist, dass in Postgresql, in der typisches Szenario, das Backup wird normalerweise durch erledigt pg_dump (einfach) und die Wiederherstellung mit dem Standard-Kommandozeilen-Client (psql).


24
2018-06-14 16:22



[OT] Ich möchte mich hinsichtlich des "nicht empfohlenen" Status des benutzerdefinierten Ausgabeformats unterscheiden - der Satz "Dies ist das flexibelste Format, da es das Neuordnen von Ladedaten sowie Objektdefinitionen erlaubt ..." aus dem Handbuch scheint für mich als durchaus eine Bestätigung. - Milen A. Radev
"Nicht empfehlenswert" war eine Übertreibung, stimme ich zu. Aber "am flexibelsten" bedeutet nicht unbedingt "am meisten empfohlen". Abgeklärt. - leonbloy


Versuche, die --format=c Option zu pg_dump. Dies wird erlauben pg_restore um es wiederherzustellen.


12
2018-06-14 16:23



Würde derjenige, der das geändert hat, erklären warum? Die angenommene Antwort erklärt, dass das funktioniert :-)
@skrafi: Was ist dein Punkt? - psmears
Entschuldigung, kopierte falsche Ausgabe, die richtige ist pg_restore: [archiver] did not find magic string in file header das funktioniert also nicht für einen einfachen sql dump - skrafi
@skrafi: Ich bin mir nicht sicher, was du meinst. Wenn du benutzt pg_dump --format=c ...> archivefileund dann verwenden pg_restore auf archivefileDann (zumindest, als ich es gerade getestet habe) funktioniert es gut. Vielleicht ist deine Datei irgendwie beschädigt? Oder hast du einen bestimmten Fehler gefunden? - psmears


Dies würde ich tun, um meine alte Datenbank zu sichern und wiederherzustellen

So sichern Sie Ihre Datenbank

pg_dump --format=c olddb_name > db_dump_file.dump

Um diese Sicherung wiederherzustellen

pg_restore -v -d newdb_name db_dump_file.dump

Lesen Sie mehr auf pg_dump und pg_restore


4
2018-02-27 09:03





Für Windows-Benutzer versuchen

type db.txt | psql --username="YOURNAME" dbname

Klappt wunderbar


3
2018-04-15 17:59





Sie können etwas mit MySQL machen SOURCE Befehl:

psql dbname

Dann im Postgresql-Terminal:

\i filename

1
2018-01-03 10:49





cat dumpFileName | psql -h ip -d dbName -U benutzername -W


0
2018-04-11 07:06



Es ist normalerweise hilfreich, wenn Sie erklären, was das ist und warum es helfen könnte. - Falcon Momot


Diese Fehlermeldung könnte auch bedeuten, dass mit der Sicherungsdatei (oder Ihren Annahmen) etwas nicht stimmt.

In einem Fall hatte ich eine Sicherungsdatei in einen Docker-Container kopiert und versucht, sie wiederherzustellen, aber es ist fehlgeschlagen does not appear to be a valid archive. Und tatsächlich war die Datei leer, weil das Mounten nicht korrekt ausgeführt wurde.


0
2018-02-20 15:54