PostgreSQL-Datenbanken sichern und wiederherstellen mit pg_dump
pg_dump ist ein PostgreSQL-Tool, das Administratoren ermöglicht, Datenbanken in verschiedenen Formaten wie Voll-, Kopie-, inkrementelle und differentielle Backups zu exportieren. Zusammen mit pg_dumpall kann dieses Werkzeug eine oder mehrere Datenbanken mit nur einem Befehl exportieren und als SQL-Skript (.sql, .dump) oder als Archivdatei (.tar, .tgz) speichern. Solche Sicherungen sind hilfreich, um Datenbanken zwischen Servern zu migrieren, nach Fehlern wiederherzustellen oder Snapshots für Tests und Entwicklung zu erstellen.
In dieser Anleitung erfahren Sie, wie man PostgreSQL-Datenbanken mit pg_dump und pg_dumpall sichert und sie anschließend mit pg_restore sowohl auf lokalen als auch auf entfernten PostgreSQL-Servern wiederherstellt.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie:
- Zugriff auf einen bestehenden PostgreSQL-Server haben.
PostgreSQL-Client installieren
In diesem Abschnitt wird beschrieben, wie der PostgreSQL-Client installiert wird. Dieser enthält wichtige Kommandozeilen-Tools wie pg_dump und pg_restore, mit denen Sie PostgreSQL-Datenbanken sichern und wiederherstellen können. Die Werkzeuge ermöglichen es, lokale oder entfernte Server zu verbinden, Daten in unterschiedlichen Formaten zu exportieren und Migrationen oder Wiederherstellungen effizient durchzuführen.
Befolgen Sie die folgenden Schritte für APT-basierte Systeme wie Ubuntu und Debian:
Aktualisieren Sie den APT-Paketindex:
$ sudo apt install -y postgresql-client
Installieren Sie den PostgreSQL-Client:
$ sudo apt install -y postgresql-client
Führen Sie auf RPM-basierten Systemen wie Rocky Linux und AlmaLinux folgenden Befehl aus:
$ sudo dnf install -y postgresql
Unter Windows können Sie die PostgreSQL-Downloadseite besuchen und den neuesten Installer herunterladen. Dieser enthält pg_dump, pg_restore und weitere Kommandozeilenprogramme.
PostgreSQL-Datenbank sichern
Mit pg_dump und pg_dumpall können Sie einzelne Datenbanken oder alle Datenbanken eines PostgreSQL-Servers sichern. Die allgemeine Syntax für pg_dump lautet:
pg_dump --host= --port= --username= --dbname= -f .dump
Um eine bestimmte PostgreSQL-Datenbank zu sichern, verwenden Sie den folgenden Befehl und passen Sie die Platzhalter an:
$ pg_dump -Fd -v --host=db.example.com --port=5432 --username=db_user --dbname=example_db -f example_db.dump
Erklärung der Parameter:
- -Fd: Gibt das Ergebnis im Verzeichnisformat aus (mit -Fc komprimiertes Format möglich).
- -v: Aktiviert detaillierte Ausgaben.
- -f: Legt die Ausgabedatei oder das Verzeichnis fest.
Um alle Datenbanken zu sichern, nutzen Sie pg_dumpall:
$ pg_dumpall -v --host=db.example.com --port=5432 --username=db_user > full-backup.sql
Hinweis: pg_dumpall unterstützt nur das Plain-SQL-Format. Für parallele oder benutzerdefinierte Backups verwenden Sie pg_dump pro Datenbank.
Nach Abschluss können Sie prüfen, ob die Sicherungsdatei erstellt wurde:
$ ls
PostgreSQL-Datenbank wiederherstellen
Zur Wiederherstellung können Sie je nach Format pg_restore oder psql nutzen. Die allgemeine Syntax für pg_restore lautet:
pg_restore --host= --port= --username= --dbname= .dump
Verbinden Sie sich mit psql zu Ihrem PostgreSQL-Server:
$ psql --host=db.example.com --port=5432 --username=db_user --dbname=postgres
Legen Sie eine Zieldatenbank an:
postgres=# CREATE DATABASE example_db;
Hinweis: Bei Einzel-Backups muss die Zieldatenbank vorher manuell angelegt werden. Bei pg_dumpall erfolgt die Neuerstellung automatisch.
Beenden Sie die PostgreSQL-Sitzung:
postgres=# \q
Stellen Sie eine einzelne Datenbank mit pg_restore wieder her:
$ pg_restore --host=db.example.com --port=5432 --username=db_user --dbname=example_db backup.dump
Um alle Datenbanken aus einem pg_dumpall-Backup wiederherzustellen, verwenden Sie psql:
$ psql --host=db.example.com --port=5432 --username=db_user -f full-backup.sql
Erklärung:
- -f: Gibt die SQL-Datei an, die wiederhergestellt wird.
- –username: Zum Wiederherstellen von Rollen und Berechtigungen ist in der Regel ein Superuser erforderlich.
Hinweis: Stellen Sie sicher, dass der Zielserver leer ist oder keine widersprüchlichen Rollen oder Datenbanken enthält, bevor Sie ein pg_dumpall-Backup zurückspielen.
Nach der Wiederherstellung können Sie sich mit der wiederhergestellten Datenbank verbinden:
postgres=# \c example_db
Listen Sie Tabellen auf, um die Wiederherstellung zu prüfen:
postgres=# \dt
Überprüfen Sie die Tabellendaten:
postgres=# SELECT * FROM app_users;
Ersetzen Sie app_users durch den Tabellennamen Ihrer Datenbank.
Beenden Sie den PostgreSQL-Client:
postgres=# \q
Fazit
Diese Anleitung hat gezeigt, wie man PostgreSQL-Datenbanken mit pg_dump, pg_dumpall und pg_restore sichern und wiederherstellen kann. Diese Werkzeuge bieten eine zuverlässige Möglichkeit, einzelne Datenbanken oder komplette Cluster für Migration, Tests oder Disaster Recovery zu exportieren. Sie haben den PostgreSQL-Client installiert, sowohl einzelne als auch vollständige Backups erstellt und Daten mit benutzerdefiniertem sowie Plain-SQL-Format erfolgreich wiederhergestellt. Für weiterführende Strategien empfiehlt sich die offizielle PostgreSQL-Dokumentation.


