Korrektes Backup/Restore?

Hallo zusammen,

ich bin eben dabei, ein Backup/Restore per Code zu schreiben. Ich stolpere aber noch darüber, dass die Restore-Funktion meine Datenbank nicht korrekt wiederherstellt. Ich denke, dass ich noch ein Verständnisproblem habe. Ich benutze die “pg_dump” sowie “pg_restore” Programme.

Das Backup mache ich so:

“C:\Program Files\PostgreSQL\13\bin\pg_dump.exe” -h localhost -p 5432 -U postgres -F c -f “C:<Pfadangabe><Dateiname>.bak”

Soweit klappt das ganz gut, im angegebenen Ordner entsteht eine .bak Datei.

Nun kommt das Restore:

“C:\Program Files\PostgreSQL\13\bin\pg_restore.exe” -h localhost -p 5432 -U postgres -C -c -d “” “<Dateiname>.bak”

Das Restore mündet in jeder Menge Fehler und sagt, dass die Relationen bereits vorhanden wären. Im Endergebnis bleibt die Datenbank unverändert. Ich war irgendwie der Meinung, dass die Optionen -C -c genau dafür da wären, die vorhandene Datenbank aufzuräumen. Im PG-Admin passiert das gleiche. Dort kann man ja in den Restore-Optionen wählen “Include CREATE Database” sowie “clean before restore”. Das ändert gar nix, die bestehende Datenbank wird nicht überschrieben.

Was mache ich hier also noch falsch?

Viele Grüße, Karsten.

-d gibt eine DB zum Initial Connect an, nicht die DB, die Du bearbeiten willst. Die steckt im Script.
Also connecte zu irgendeiner DB, z.B. Postgres oder Template (natürlich auf dem gleichen Host, wo erzeugt werden soll).

Ah, danke dir. Mittlerweile habe ich herausgefunden, dass die doppelte Angaben von -C und -c auch ein Problem ist. Ich verwende jetzt nur -c und damit versucht nun das System, die wiederherzustellende Datenbank zu putzen. Leider klappt das nicht so recht, da aufgrund von Abhängigkeiten zwischen den Tabellen bestimmte Tabellen nicht gelöscht werden können. Das ist jetzt etwas unschön, da somit die wiederhergestellte Datenbank nicht 1:1 dem gesicherten Stand entspricht. Wahrscheinlich werde ich vor dem Wiederherstellen die Zieldatenbank löschen müssen.

Gruß, Karsten.