Ich versuche folgenden Befehl auszuführen:
sshpass -p "pass" ssh x@1.2.3.4 "pg_dump -Fc -U foo some_db" | pg_restore --create --dbname=new_db
Ich bekomme:
failed: FATAL: database "new_db" does not exist
quelle
Ich versuche folgenden Befehl auszuführen:
sshpass -p "pass" ssh x@1.2.3.4 "pg_dump -Fc -U foo some_db" | pg_restore --create --dbname=new_db
Ich bekomme:
failed: FATAL: database "new_db" does not exist
Dies liegt daran, dass pg_restore auf diese Weise funktioniert.
Das Handbuch von pg_restore lautet wie folgt:
-C, --create Erstellt die Datenbank vor dem Wiederherstellen. Wenn auch --clean angegeben ist, löschen Sie die Zieldatenbank und erstellen Sie sie erneut, bevor Sie eine Verbindung herstellen.
Wenn diese Option verwendet wird, wird die mit -d bezeichnete Datenbank nur zur Ausgabe der ersten Befehle DROP DATABASE und CREATE DATABASE verwendet . Alle Daten werden in dem Datenbanknamen wiederhergestellt, der im Archiv angezeigt wird .
Das -d wird in der angegebenen Datenbank nur dann wiederhergestellt, wenn -C nicht verwendet wird. Wenn -C verwendet wird, wird die Datenbank als "Launchpad" und nicht als Ziel verwendet.
pg_restore
. Mit der Option -C kann nur eine Datenbank erstellt werden, deren Name mit dem Datenbanknamen in der Sicherungsdatei übereinstimmt. Um eine Wiederherstellung in einer beliebigen DatenbankCREATE DATABASE new_db;
durchzuführen , müssen Sie vor der Ausführung psql ausführenpg_restore --dbname=new_db
.docker-compose -p dump_import -f docker/dump_import.yml run --rm be bash -c 'waitforit -host=postgres -port=5432 -timeout=30 && export PGPASSWORD=$DATABASE_PASSWORD && createdb --echo --port=$DATABASE_PORT -host=$DATABASE_HOST --username=$DATABASE_USER $DATABASE_NAME && pg_restore --format=c --dbname=$DATABASE_URL_WITHOUT_QUERY tmp/full.dump && echo "Import done"'
Kurz gesagt, Sie möchten entweder (vorhandene bereinigen): (Beachten Sie, dass der Datenbankname ist
postgres
)oder (neu erstellen)
oder (explizit neu anlegen)
Sehen Sie, was SCO für weitere Details gesagt hat.
quelle
pg_restore: [archiver] -C and -c are incompatible options
pg_restore -C -d postgres db.dump
mag beängstigend aussehen, aber es hat nichts mit der postgres-Datenbank zu tun, sondern verwendet sie nur für die anfängliche Verbindung.Um es etwas genauer auszudrücken, dies ist das, was ich getan habe, um das Problem für mich zu lösen:
Erstellen Sie eine leere Datenbank mit dem gewünschten Namen: (in meinem Fall war der Benutzername 'postgres')
Sie werden dann zur Eingabe Ihres Passworts aufgefordert. An diesem Punkt werden Sie als [Benutzername] angemeldet. Geben Sie Folgendes ein:
Beenden Sie nun die Sitzung und kehren Sie zu Ihrer regulären Terminalsitzung zurück.
Stellen Sie die Datenbank aus der Datei wieder her, in der Sie den Namen der Zieldatenbank als den gerade erstellten Datenbanknamen festgelegt haben.
Dabei ist [Ihr_Dateipfad / Dateiname] der Speicherort der DB-Datei oder Textdatei, die Sie wiederherstellen möchten.
quelle
-F
Option de erstellen, müssen Sie pg_restore verwenden, um das Backup wiederherzustellen, es sei denn, Sie verwenden-F p
, um eine Nur-Text-Datei mit SQL-Sätzen zu erstellen.