pg_dump - Fehlerabfrage

Hallo!

Wir arbeiten mit Postgres-Server unter Windows und benutzen pg_dump direkt aus unserem Programm zur Erstellung der Backups.
Bei einem Kunden hatten wir jetzt ein Problem, dass pg_dump wohl ausgeführt wurde, aber die vorhandene Backup-Datei nicht überschrieben wurde und eine Größe 0 hatte. Nach dem Umbenennen/Löschen der alten Datei hat alles wieder funktioniert.

Die Frage ist jetzt, ob ich irgendwie eine Rückmeldung von pg_dump bekommen kann, um festzustellen, ob das Update gelaufen ist?
Im Internet und hier im Forum konnte ich leider bis jetzt nichts finden!

While running pg_dump, one should examine the output for any warnings (printed on standard error)

Aus der Doku…

Und Bernd sagt:

Re: Wie überprüfe ich ein Ba ckup Prozess mit pg_dump


Andreas

Wie genau erzeugt ihr das Backup? Also wie sieht der “pg_dump” Aufruf aus?

Oh und eigentlich testet man seine Backups regelmäßig und automatisiert :wink:

Zur Zeit wird eine temporäre Batch-Datei erstellt und durch das Programm gestartet. Während der Ausführung wird der Prozess überwacht und am Ende die Datei gelöscht.
Der Inhalt der Datei sieht so aus:

SET PGPASSWORD=kennwort
pg_dump.exe" -i -h localhost -U user -F c -b -v -f "C:\Backup\tag_5.backup" "dbname"

Dieses Verhalten wollen wir ändern und auch den Rückgabewert bekommen.

Ich arbeite noch nicht so lange mit postgres und bin nicht so fit mit dem!
Könntest du bitte näher erläutern, wie das ganze funktioniert oder wo das Vorgehen am Besten mit Beispielen beschrieben ist?

Was nützt dir das beste Backup, wenn du nicht weisst ob es wirklich funktioniert?
Man sollte das Backup also prüfen (entspricht es in etwa der erwarteten Größe) und kann man das Backup in eine andere Datenbank wieder einspielen?

Wer will schon Backup? Wenn, dann will man Restore :wink:

SCNR.


Andreas

Da werde ich dir nicht widersprechen! Deswegen möchte ich ja überprüfen, ob das Backup funktioniert hat.
Unter MSSQL-Server war es einfacher, weil da alles über SQL-Befehle geht und überprüft werden kann! Bei Postgres habe ich diese Möglichkeit leider nicht gesehen, außer des Umwegs über pg_dump, pg_restore usw.!

Wie kann ich abfragen, wie groß die Datensicherung seien wird, um diese zu vergleichen?

Bevor ich mit der Wiederherstellung anfange, muss ich zuerst wissen, ob pg_dump ohne Fehler gelaufen ist, wofür ich den Rückgabewert und dessen mögliche Werte brauche!

Ich habe bis jetzt noch kein Programm gesehen, dass von sich aus die Datensicherung gemacht hat und dann sofort dessen Wiederherstellung getestet hat! Es könnte evtl. auch noch zus. Funktion für das Programm werden, aber nur durch die manuelle Auswahl des Benutzers, da es bei den großen Datenbanken lange dauern kann. Es ist schon schwer die normalen Benutzer dazu zu bewegen, am Ende des Programms auf die Datensicherungstaste zu klicken. Das machen die nur dann, wenn die schon ein mal die Daten manuell wiederherstellen mussten! :slight_smile:

Ansonsten wird die Datensicherung und Wiederherstellung nur von Admins und Entwicklern benutzt und das muss auch noch gelernt werden, weswegen ich auch hier bin und die Fragen stelle.

Leider kann ich auch keine Linuxscripte direkt auf Windows anwenden oder Umsetzen, wenn ich nicht weiss, ob pg_admin überhaupt was zurück gibt, ob er das direkt oder an Errorlevel zurückgibt usw… Das sollte eigentlich in der Doku genauer beschrieben werden. Und die Backupfehler müssten ja auch irgendwie produziert werden, um die Code selber herauszufinden.
Es sollte doch möglich sein, einfach am Ende 0 oder 1 für Erfolgreich oder nicht Erfolgreich o.ä. zu bekommen?

Das macht pg_dump, siehe mein Link in meiner ersten Antwort.

Andreas

Ich habe ein Beispiel gefunden, in dem ein Fehlercode beim Sichern einer nicht existierender Datenbank ausgegeben wird:

pg_dump -h localhost nondatabase
echo Fehlercode: %ERRORLEVEL%

Anscheinend gibt pg_dump unter Windows den Fehlercode direkt an ERRORLEVEL zurück.

und noch zu der Frage, die noch nicht beantwortet wurde:

Wie kann ich abfragen, wie groß die Datensicherung seien wird, um diese zu vergleichen?

Ich habe den Befehl zur Abfrage der Größe der DB gefunden:

select pg_database_size('dbname')

Aber kann ich die Größe der zukünftigen Sicherung ermitteln?

Nein.

In der pg_database_size sind z.B. auch die Indexe mit drin, andererseits kann PG manche Dinge auch komprimiert speichern. Vorher zu sagen, wie groß der Dump wird, ist daher schwer.

Du kannst schauen, ob (bei ASCII-Dumps) zum Schluß steht:

--
-- PostgreSQL database dump complete
--

Aber eigentlich bevorzugt man -F c.


Andreas

Wenn ich mich richtig erinnere, dann haben Windows Programme keinen Rückgabewert.
Keine Ahnung, wie man da einen Status abfragt.

Bezüglich der Backup-Größe: es muss keinen Zusammenhang zwischen Größe der Datenbank und Größe des Backups geben. Die Datenbank könnte jede Menge Bloat enthalten und daher viel größer sein als das Backup.
Ich vergleiche da gern die Größe der letzten Backups.

Doch, haben sie. In einer Batchdatei kann man das über ERRORLEVEL abfragen.