CodeGym /Kurse /SQL SELF /Datenwiederherstellung mit pg_restore

Datenwiederherstellung mit pg_restore

SQL SELF
Level 43 , Lektion 3
Verfügbar

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 mit pg_dump im custom- oder directory-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

  1. 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
  1. 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
  1. Wiederherstellung des Datenbankschemas.

Um nur die Struktur der Tabellen (ohne Daten) wiederherzustellen:

pg_restore -U postgres -d university --schema-only backup.dump
  1. 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.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION