Nachdem du als verantwortlicher Datenbank-Admin ein Backup erstellt hast, kommt der Moment der Wahrheit: die Wiederherstellung der Daten. Und hier betritt der Held dieser Episode die Bühne – der Befehl pg_restore. Wenn pg_dump dein Superheld für Backups war, dann ist pg_restore sein Sidekick, der die Daten aus den erstellten Backups wieder zum Leben erweckt.
pg_restore wird verwendet, um Daten aus Dateien wiederherzustellen, die mit pg_dump im Binärformat (custom oder directory) erstellt wurden. Falls deine Datenbank aus irgendeinem Grund beschädigt wurde oder du Daten auf einen neuen Server umziehen willst, ist dieses Tool dein unverzichtbarer Buddy.
Warum du pg_restore brauchst:
- Du kannst damit entweder die komplette Datenbank oder einzelne Teile davon (Schema, Tabellen, Daten) wiederherstellen.
- Es ist ein mächtiges Tool für komplexe Restore-Szenarien, bei denen du den Prozess im Detail steuern willst.
Grundlegende Syntax des Befehls
Die Arbeit mit pg_restore startet mit der Basissyntax:
pg_restore -U benutzername -d datenbankname backup_file.dump
Parameter des Befehls:
-U benutzername: gibt den PostgreSQL-Benutzernamen für die Verbindung an.-d datenbankname: Name der Datenbank, in die die Daten wiederhergestellt werden.backup_file.dump: die Backup-Datei, die vorher mitpg_dumpimcustom- oderdirectory-Format erstellt wurde
Zum Beispiel, wenn du die Datenbank university aus der Datei backup.dump als User postgres wiederherstellen willst, sieht der Befehl so aus:
pg_restore -U postgres -d university backup.dump
Wenn du diesen Befehl startest, beginnt pg_restore mit dem Wiederherstellungsprozess und bringt die Daten zurück in die Datenbank!
Backup-Typen und ihre Kompatibilität
Nicht alle Backups sind gleich. Du erinnerst dich vielleicht, dass wir beim Erstellen eines Backups mit pg_dump verschiedene Formate angeben konnten. Manche davon sind mit pg_restore kompatibel, andere nicht.
| Backup-Format | Beschreibung | Unterstützt von pg_restore |
|---|---|---|
plain (Text) |
SQL-Skript mit Restore-Befehlen. | ❌ Nein |
custom |
Komprimiertes Backup im proprietären PostgreSQL-Format. | ✅ Ja |
directory |
Backup als Verzeichnis mit mehreren Dateien gespeichert. | ✅ Ja |
tar |
Archiv im TAR-Format. | ✅ Ja |
Beachte, dass du für Text-Backups (plain) nicht pg_restore verwenden kannst. Solche Dateien werden manuell mit psql wiederhergestellt. Zum Beispiel:
psql -U benutzername -d datenbankname -f backup.sql
Flexibilität von pg_restore: Restore-Parameter
Einer der Hauptgründe, warum pg_restore so beliebt ist, ist seine Flexibilität. Damit kannst du nicht nur die ganze Datenbank, sondern auch einzelne Teile wiederherstellen.
Wiederherstellung der Datenbankstruktur. Wenn du nur die Struktur der Datenbank (Tabellen-Schemas, Indizes, Trigger usw.) wiederherstellen willst, nutze das Flag --schema-only:
pg_restore -U postgres -d university --schema-only backup.dump
Das ist praktisch, wenn du die Struktur analysieren oder eine "leere" Kopie erstellen willst.
Nur Daten wiederherstellen. Wenn dich nur die Daten (ohne Struktur) interessieren, nutze --data-only:
pg_restore -U postgres -d university --data-only backup.dump
Das ist nützlich, wenn die Struktur schon existiert, du aber den Inhalt der Tabellen wiederherstellen willst.
Vor dem Restore aufräumen. Manchmal gibt es Tabellen oder Schemas schon in der Datenbank. Um sie vor dem Restore zu löschen, nutze das Flag --clean:
pg_restore -U postgres -d university --clean backup.dump
Mit diesem Parameter löscht pg_restore zuerst die existierenden Objekte und stellt dann die Daten aus dem Backup wieder her.
Objekte filtern. pg_restore lässt dich auswählen, welche Objekte aus dem Backup du wiederherstellen willst. Dafür gibt's das Flag --table:
pg_restore -U postgres -d university --table=students backup.dump
Dieses Beispiel stellt nur die Tabelle students wieder her.
SQL-Ausgabe in die Konsole
Wenn du sehen willst, was beim Restore ausgeführt wird, aber die Datenbank nicht gleich ändern möchtest, nutze das Flag --list:
pg_restore -l backup.dump
Und um die SQL-Befehle als Text zu bekommen, die ausgeführt werden, füge --verbose hinzu:
pg_restore -U postgres --verbose --schema-only backup.dump
Restore-Beispiele
- Komplette Wiederherstellung der Datenbank.
Das ist das typische Szenario: Du willst die komplette Datenbank aus dem Backup wiederherstellen:
pg_restore -U postgres -d university backup.dump
- Wiederherstellung einer bestimmten Tabelle.
Wenn du zum Beispiel nur die Daten aus der Tabelle courses verloren hast, stell sie einzeln wieder her:
pg_restore -U postgres -d university --table=courses backup.dump
- Wiederherstellung des Datenbankschemas.
Um nur die Struktur der Tabellen (ohne Daten) wiederherzustellen:
pg_restore -U postgres -d university --schema-only backup.dump
- Restore mit Überschreiben der Objekte.
Wenn du existierende Daten überschreiben willst:
pg_restore -U postgres -d university --clean backup.dump
Typische Fehler beim Restore und wie du sie vermeidest
Versionsinkompatibilität. Wenn du ein Backup mit einer PostgreSQL-Version erstellst und versuchst, es auf einer anderen (vor allem älteren) Version wiederherzustellen, kann es zu Kompatibilitätsfehlern kommen. Lösung: Benutze möglichst die gleiche PostgreSQL-Version für Backup und Restore.
Fehler "Role does not exist". Wenn im Backup Rollen (User) verwendet werden, die auf dem Zielserver nicht existieren, bekommst du diesen Fehler. Lösung: Erstelle die nötigen Rollen vorher auf dem neuen Server.
Fehler "Table already exists". Dieser Fehler tritt auf, wenn du versuchst, eine Tabelle wiederherzustellen, die schon existiert. Nutze
--clean, um Konflikte zu vermeiden.
GO TO FULL VERSION