Funktioniert die Datei "pgpass.conf" nur beim Dump, nicht beim Restore?

Hallo zusammen,

ich kämpfe mich durch das Erstellen eines Backups und die Wiederherstellung. Das Backup mit “pg_dump” geht nun sauber und dank “pgpass.conf” auch ohne Passwortrückfrage. Beim “pg_restore” hingegen wird wieder ein Passwort angefragt… Gibt es da noch etwas anderes zu beachten?

Gruß, Karsten.

die Datei sollte .pgpass heißen, nicht pgpass.conf … und die Option -w bzw. --no-password mag hilfreich sein.

Unter Windows muss sie pgpass.conf heissen. Keine Ahnung warum

1 „Gefällt mir“

Hallo ihr zwei, der Name “pgpass.conf” passt schon, schließlich wird die Datei von “pg_dump” klaglos akzeptiert. Das pg_dump legt ohne Passwortabfrage direkt los. Lediglich das pg_restore kümmert sich nicht drum und fragt trotzdem nach dem Passwort… Da muss es doch noch einen Unterschied geben, oder?

Meine Vermutung: der Restore geht in eine andere Datenbank und Du hast im Feld für die Datenbank im pgpass Eintrag kein * verwendet, sondern einen bestimmten Datenbanknamen.

Yupp, Treffer und Schiff versenkt.

Ich hatte den Tipp aus meinem anderen Thread verwendet, dort hieß es, für das Restore soll ich beim Parameter -d nicht den Name der wiederherzustellenden DB angeben, sondern zum Beispiel “postgres” oder “template”. Das habe ich wieder geändert, das “-d” geht jetzt auf den Name der wiederherzustellenden Datenbank und damit unterbleibt die Passwortabfrage. Im pgpass-File steht immer nur der Name der DB drin, um die es grade geht. Das File wird von meinem Programm erzeugt und auch wieder von meinem Programm gelöscht, es stellt ja ein nicht unerhebliches Sicherheitsrisiko dar.

Somit klappt das jetzt alles soweit. Danke schön. Gruß, Karsten.

Wenn die Berechtigungen stimmen, dann ist das Risiko eigentlich recht klein.

Alternativ könntest Du aber auch mit Umgebungsvariable arbeiten, die Du vor dem Aufruf setzt.

Das ist natürlich richtig. Während der Laufzeit des Skriptes könnte ein findiger Anwender auch die pgpass-Datei einfach wegkopieren… aber mit dem Löschen ist es noch sicherer.

Wo wir grade dabei sind: Das Backupfile wird ja auf einen Ordner meiner Wahl kopiert. Kann die Backupdatei eigentlich problemlos auf irgendeinem andere Server wiederhergestellt werden? Dann wären ja die Daten wiederum offen… Oder wie stellt man sich, dass das Backup geschützt ist? Gibt’s es da einen guten Artikel irgendwo zum Nachlesen? (Sorry, falls das eine absolute Noob-Frage ist, ich komme vom MSSQL-Server und muss den PG von heute auf morgen mit betreuen).

ja, das ist der Zweck eines Backups, daß man das, auch woanders, wieder herstellen kann :wink:

Wenn Du kein Vertrauen hast, dann ist das ein Problem. Du könntest das Backup z.B. verschlüsseln, nachdem er erstellt wurde.

Ja, mit dem Thema muss ich definitiv nochmal ran. Das Backup, welches ich hier erstelle ist ja nur Teil einer größeren Prozedur. Es wird vollautomatisch erstellt, weil danach noch diverse Änderungen an der Datenbank vorgenommen werden und wenn die schief gehen, dann will ich per Code zurückgehen können. Aber ich will natürlich nicht ein Datenleck schaffen, indem ich eine ansonsten geschützte Datenbank einfach per Backup “frei” verfügbar mache.

2 Hinweise, generell:

  1. Du kannst Änderungen auch in einer Transaktion durchführen, das geht bei PostgreSQL auch bei (fast) allen DDL-Befehlen
  2. es gibt neben logischen Backups (pg_dump(all)) auch physische Backups, mit denen Du auch zu einem bestimmten Point-In-Time-Recovery durchführen kannst

Ansonsten: viel Erfolg!

Ah, cool, danke schön.

Anmerkung zu Punkt 1: Was wir als “Änderung” bezeichnen, kann schon mal sehr umfangreich sein, zum Beispiel das Einspielen aller Postleitzahlen, Ort, Gemeindeschlüssel aus dem D-A-CH Bereich oder alle aktuellen Finanzämter von Deutschland. Daneben gibt es möglicherweise diverse Anpassungen in den Daten, zum Beispiel gab es mal ein Update, da haben wir eine Spalte mit einer Bezeichnung per Code aus anderen Bezeichnungen zusammengesetzt und gespeichert. Da können schon mal schnell 50k Datensätze betroffen sein. Natürlich gibt es dann auch neue Tabellen/Spalten/Indizes. Wäre das nicht ein bisschen arg viel für eine einzige Transaktion?

nun ja, PG ist sehr stabil, auch und gerade bei solchen Sachen…

Nein, 50K geänderte Datensätze in einer Transaktion sind nicht wirklich ein Problem