Die Eingabedatei scheint ein Dump im Textformat zu sein. Bitte benutzen Sie psql

91

Ich mache ein Backup mit

pg_dump db_production > postgres_db.dump

und dann kopiere ich es mit scp nach localhost.

Wenn ich jetzt auf meine lokale Datenbank importiere, wird ein Fehler ausgegeben

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

mit Kommadzeile

pg_restore -d db_development postgres_db.dump
Haseeb Ahmad
quelle

Antworten:

134

Aus der pg_dumpDokumentation:

Beispiele

So sichern Sie eine Datenbank namens mydb in einer SQL-Skriptdatei :

$ pg_dump mydb > db.sql

So laden Sie ein solches Skript in eine (frisch erstellte) Datenbank mit dem Namen newdb :

$ psql -d newdb -f db.sql

So sichern Sie eine Datenbank in einer Archivdatei im benutzerdefinierten Format:

$ pg_dump -Fc mydb > db.dump

So sichern Sie eine Datenbank in einem Archiv im Verzeichnisformat:

$ pg_dump -Fd mydb -f dumpdir

So laden Sie eine Archivdatei in eine (frisch erstellte) Datenbank mit dem Namen newdb neu:

$ pg_restore -d newdb db.dump

Aus der pg_restoreDokumentation:

Beispiele

Angenommen, wir haben eine Datenbank namens mydb in eine benutzerdefinierte Dump-Datei geschrieben:

$ pg_dump -Fc mydb > db.dump

So löschen Sie die Datenbank und erstellen sie neu aus dem Speicherauszug:

$ dropdb mydb
$ pg_restore -C -d postgres db.dump
Зелёный
quelle
2
Wenn ich pg_restore mache, bekomme ich pg_restore: Die Eingabedatei [archiver] scheint ein Dump im Textformat zu sein. Bitte benutzen Sie psql.
Haseeb Ahmad
Welches verwende ich, um db wiederherzustellen?
Haseeb Ahmad
67
Dies beantwortet nicht die Frage
Dopatraman
1
für eine Möglichkeit, aus einer Textdatei wiederherzustellen checkout serverfault.com/questions/260607/…
chrs
5
IMO dieser Beitrag hat ein wenig zu viele Details, die die Antwort verschleiern. Der Autor hat nicht darauf hingewiesen, dass in der Dokumentation zu pg_dump für den Parameter '-F' nicht angegeben ist, dass das Standardformat ('p' / 'plain') für pg_restore geeignet ist. Für pg_restore muss pg_dump mit den Formaten 'c', 'd' oder 't' verwendet werden.
Matt
59

Die obige Antwort hat bei mir nicht funktioniert, das hat funktioniert:

psql db_development < postgres_db.dump

Uziel Valdez
quelle
Kurz und bündig. Hat auch für mich gearbeitet.
Schüler
11

Für mich, wenn ich versuche, von einem Remote-Host wiederherzustellen, habe ich verwendet

psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump

hat gut funktioniert. Und wenn nicht fern, funktionierte nur der folgende Befehl.

psql -d database < db.dump
Tserenjamts
quelle
7

Um ein Backup zu erstellen, das mit pg_dumpdiesem kompatibel ist pg_restore, müssen Sie beim Erstellen Ihres Dumps das --format=custom/ verwenden -Fc.

Aus den Dokumenten:

Geben Sie ein Archiv im benutzerdefinierten Format aus, das für die Eingabe in pg_restore geeignet ist.

Ihr pg_dumpBefehl könnte also so aussehen:

pg_dump --file /tmp/db.dump --format=custom --host localhost --dbname my-source-database --username my-username --password

Und dein pg_restoreBefehl:

pg_restore --verbose --clean --no-acl --no-owner --host localhost --dbname my-destination-database /tmp/db.dump
Tim Fletcher
quelle
6

Für mich funktioniert es so. C: \ Programme \ PostgreSQL \ 12 \ bin> psql -U postgres -p 5432 -d Dummy -f C: \ Benutzer \ Downloads \ d2cm_test.sql

RAJNISH YADAV
quelle
2
Einfache und hilfreiche Antwort!
Rax Weber
1
Vielen Dank @RAJNISH YADAV.
Amit
0

Wenn Sie pg_dump mit -Fp zum Sichern im Nur-Text-Format verwenden, verwenden Sie den folgenden Befehl:

cat db.txt | psql dbname

um alle Daten mit dem Namen dbname in Ihre Datenbank zu kopieren

M2E67
quelle
0

Wenn Sie einen vollständigen DB-Dump haben:

PGPASSWORD="your_pass" psql -h "your_host" -U "your_user" -d "your_database" -f backup.sql

Wenn Sie Schemas jedoch separat aufbewahren, funktioniert dies nicht. Dann müssen Sie Trigger für das Einfügen von Daten deaktivieren, ähnlich wie pg_restore --disable-triggers. Sie können dann Folgendes verwenden:

cat database_data_only.gzip | gunzip | PGPASSWORD="your_pass" psql -h "your_host" -U root "your_database" -c 'SET session_replication_role = replica;' -f /dev/stdin

Nebenbei bemerkt, es ist ein sehr unglücklicher Nachteil von Postgres, denke ich. Die Standardmethode zum Erstellen eines Speicherauszugs pg_dumpist nicht kompatibel mit pg_restore. Mit einigen zusätzlichen Schlüsseln ist es jedoch. WTF?

VasiliNovikov
quelle