Technische Tipps: Wie sichere und stelle ich die Postgres-Datenbank wieder her?
Karan Singh
19.06.2013
1 min read

Wichtige Erkenntnisse
PostgreSQL-Backups können je nach Bedarf auf einzelne Tabellen, eine einzelne Datenbank oder alle Datenbanken abzielen.
pg_dumperstellt eine SQL-Textdatei, die die DDL und die Daten enthält, die zum Wiederherstellen der Zieltabelle oder -datenbank benötigt werden.pg_dumpallsichert alle Datenbanken auf der Postgres-Instanz.Die Wiederherstellung erfolgt mit
psql, das den SQL-Dump zurück in die Zieldatenbank ausführt.Bei Tabellenebenen-Wiederherstellungen muss sichergestellt werden, dass die Tabelle nicht bereits existiert, um Konflikte zu vermeiden.
Beim Sichern einzelner Tabellen sollten Sie auf relationale Abhängigkeiten achten.
Dumps können von lokalen Postgres-Instanzen genommen und auf Remote-Postgres-Instanzen wiederhergestellt werden.
Backups beinhalten
CREATE-,ALTER- undCOPY-Befehle, abhängig davon, was exportiert wird.Die richtige Backup-Strategie hängt vom Verständnis der Tabellenbeziehungen, der Verwendung von Schemata und den Bereitstellungsumgebungen ab.
Stellen Sie immer die Datenintegrität sicher, indem Sie Backups erstellen, die bei Bedarf referenzierte Tabellen enthalten.
Q&A Highlights
Was macht pg_dump tatsächlich?
pg_dumperzeugt eine textbasierte SQL-Datei, die den vollständigen Satz von Befehlen enthält, um eine Tabelle oder Datenbank genau so wiederherzustellen, wie sie zum Zeitpunkt der Sicherung existierte.Kann ich nur eine Tabelle statt einer gesamten Datenbank sichern?
Ja. Verwenden Sie
pg_dump --table TABLENAME, um eine spezifische Tabelle zu exportieren. Falls Tabellen mit demselben Namen in verschiedenen Schemata existieren, verwenden Sie--schema, um das richtige anzugeben.Sollte ich mir Sorgen über verwandte Tabellen machen, wenn ich eine einzelne Tabelle sichere?
Absolut. PostgreSQL ist relational, daher könnten andere Tabellen auf die Tabelle verweisen, die Sie sichern. Wenn Sie nur eine Tabelle ohne die zugehörigen wiederherstellen, können Sie die referenzielle Integrität gefährden.
Wie sichere ich eine vollständige Datenbank?
Führen Sie einen Befehl aus wie:
pg_dump -U <user> <database> -f <output.sql>Dies exportiert alle Tabellen, Schemadefinitionen, Indizes und Daten für diese Datenbank.
Was macht pg_dumpall?
pg_dumpallsichert jede Datenbank auf dem Server in einer einzigen SQL-Datei. Es ist nützlich bei der Migration oder Erstellung eines Snapshots einer gesamten Postgres-Instanz.Kann ich eine Tabelle in eine bestehende Datenbank wiederherstellen?
Ja. Verwenden Sie
psql -U <user> -f <file.sql> <database>.Aber stellen Sie sicher, dass die Tabelle nicht bereits existiert — andernfalls erhalten Sie während der Wiederherstellung „existiert bereits“-Fehler.
Was passiert während eines vollständigen Datenbank-Restore?
Die Wiederherstellungsdatei wird ausgeführt:
CREATE TABLEALTER TABLECOPY(für Tabellendaten)
um die Datenbank wieder in ihren genauen Zustand zum Zeitpunkt der Sicherung zu versetzen.
Kann ich zu einem anderen Server als dem, von dem ich gesichert habe, wiederherstellen?
Ja. Dumps sind portabel. Sie können ein Backup lokal erstellen und es auf eine entfernte Postgres-Instanz wiederherstellen, vorausgesetzt, die Versionen sind kompatibel.
Beeinflusst pg_dump die laufende Datenbank?
Nein. Es funktioniert über SQL-Abfragen und sperrt nicht die gesamte Datenbank. Es erfasst sicher eine konsistente Momentaufnahme.
Wie stelle ich alle Datenbanken aus einer pg_dumpall-Datei wieder her?
Verwendung:
psql -U <user> -f all_dump.sqlDies stellt jede in der Dump-Datei gefundene Datenbank wieder her.



