pg_dumpall in PostgreSQL 8.3 unter Windows

Hallo,

ich habe mit dem Befehl
W:>D:\Programme\PostgreSQL\8.3\bin\pg_dumpall.exe -h 100.0.0.5 -f all.dmp -U Admin -c
einen vollständigen dump des DB-Clusters als plain text vom Server geholt. Das sollte nach meinem Verständnis die “versionssichere” Alternative zum backup des data-Filesystems sein. Alle eigenen DBs (z. Z. nur dev, später auch test und prod), postgres und template1 sowie alle globalen Einstellungen, insbesondere die Login-Rollen Admin (superuser), Write und Read sollen damit über psql unmittelbar restauriert werden können.

Nach Starten von psql mit
D:\Programme\PostgreSQL\8.3\bin\psql.exe -h 100.0.0.5 -p 5432 postgres Admin
und Einspielen des dumps mit
\i all.dmp
kommt es zu einer Reihe von Fehlermeldungen:

ERROR: current user cannot be dropped

  • logisch, als der bin ich connected, aber ich muß mich ja auch als bekannter user bei einer DB anmelden!?

ERROR: role “read” cannot be dropped because some objects depend on it
DETAIL: 34 objects in database dev

  • wenn ich diese Rolle nicht für diverse GRANTs benutzen würde, bräuchte ich sie nicht
    Dgl. für role “write”

Meine “dev” DB wird dann ohne Probleme gedropped und vollständig wiederhergestellt.
“postgres” wird nicht gedropped, es gibt aber keine Fehler.

Bei “template1” gibt es dann wieder Fehler:
ERROR: language “plsql” already exists
mehrfach ERROR: relation “<…>” already exists
mehrfach ERROR: function “<…>” already exists with same argument types

  • “template1” ist ja auch nicht gedropped worden.

Was habe ich falsch gemacht/verstanden?

Für Hilfe vielen Dank im voraus!

G. Seehaus

Doku nicht gelesen?

Einen mit pg_dumpall erstellten Dump spielt man in eine komplett neu erstellen Cluster mittels

psql -f infile postgres

wieder ein.
PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: SQL Dump


Andreas

Hallo Andreas,

vielen Dank für die schnelle Antwort.

Doku nicht gelesen?

Doch, allerdings hier PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: pg_dumpall.
Aber auch hier PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: SQL Dump steht nichts von komplett neu erstellem Cluster. Insbesondere die Formulierung “pg_dumpall works by emitting commands to re-create roles, tablespaces, and empty databases” und der Schalter

-c
–clean Include SQL commands to clean (drop) databases before recreating them. DROP commands for roles and tablespaces are added as well.

aus der pg_dumpall-Doku deuten nicht auf neu erstellten Cluster hin. Wieso sollte ich in einem solchen databases und roles droppen wollen?
Auf jeden Fall wäre ein Hinweis auf initdb schon hilfreich.

Aber, wie dem auch sei, mir geht es nur um eine möglichst einfache, automatisierbare backup-Strategie für meine DBs inklusive der damit verbundenen Rollen.
Ist da ein allnächtliches pg_dumpall und im Falle eines Falles

initdb [parameter]
psql -f all.dmp postgres

(sicher muß davor noch das data-Filesystem gelöscht werden, um danach vorher == nachher zu haben)

die Methode der Wahl?

Götz