it-swarm.com.de

pg_restore FEHLER: "Beziehung existiert nicht" und Erstellen einer neuen Datenbank

Ich habe eine Sicherungskopie meiner spezifischen Tabellen erstellt, die ich in einer neuen Datenbank wiederherstellen möchte.

call pg_dump -Fc -h server -d database -U user -p password -v -f dump.sql -t public.table1 -t public.table2

Und ich habe keine Probleme.

Ich möchte dann den Speicherauszug wiederherstellen, indem ich mit pg_restore eine neue Datenbank erstelle, indem ich:

call pg_restore --clean --create -d temp -h server -p password -U user dump.sql

Dies gibt mir den Fehler "Datenbanktemperatur existiert nicht". Dies hätte die Datenbank erstellen und wiederherstellen sollen, soweit ich weiß.

I Erstellen Sie dann jedoch die "temporäre" Datenbank manuell und führen Sie Folgendes aus:

call pg_restore --clean --create -d temp -h server -p password -U user dump.sql

Dies folgt durch, erstellt aber nicht die Tabellen und gibt mir einen Fehler "relation table1" und "relation table2 "existiert nicht und erstellt nur die entsprechenden id_sewuences für die beiden Tabellen.

Was ich eigentlich möchte, ist, dass ich die neue Datenbank nicht manuell erstellen muss und dass alle Tabellen in der Sicherung über pg_restore in einer brandneuen Datenbank wiederhergestellt werden.

call pg_restore --clean --create -d temp -h server -p password -U user dump.sql

so wie ich es verstehe.

Bitte helfen Sie, sehr frustrierend

4
Ian23

Wenn --create Und -d Zusammen verwendet werden, ist das Argument für -d nicht der Name von Bei der zu erstellenden Datenbank handelt es sich um den Namen einer vorhandenen Datenbank, für die eine Verbindung zum Ausführen der Anweisung CREATE DATABASE hergestellt werden soll, da keine Datenbank erstellt werden kann, wenn Sie noch keine Verbindung zu einer anderen Datenbank hergestellt haben.

Dies ist dokumentiert als:

Wenn diese Option verwendet wird, wird die mit -d benannte Datenbank nur verwendet, um die anfänglichen Befehle DROP DATABASE und CREATE DATABASE auszugeben. Alle Daten werden in dem Datenbanknamen wiederhergestellt, der im Archiv angezeigt wird.

Aus diesem Grund sind pg_restore Fehler mit Datenbanktemp nicht vorhanden

Sie sollten einen createdb - Schritt in Ihre Wiederherstellungsprozedur einfügen, da Sie ohnehin einen bestimmten Datenbanknamen erstellen möchten, der nicht aus der Sicherung stammt.

Für das zweite Problem ist es eine völlig andere Frage, schwer zu erraten, warum dies ohne vollständige Fehlermeldungen geschieht.

Beachten Sie auch, dass auf -p Kein Kennwort, sondern eine Portnummer folgt.

4
Daniel Vérité