Technische Tipps: Wie sichere und stelle ich die Postgres-Datenbank wieder her?

Karan Singh

19.06.2013

E-Mail

1 min read

Technische Tipps: Wie sichere und stelle ich die Postgres-Datenbank wieder her?

Wichtige Erkenntnisse

    • PostgreSQL-Backups können je nach Bedarf auf einzelne Tabellen, eine einzelne Datenbank oder alle Datenbanken abzielen.

    • pg_dump erstellt eine SQL-Textdatei, die die DDL und die Daten enthält, die zum Wiederherstellen der Zieltabelle oder -datenbank benötigt werden.

    • pg_dumpall sichert 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- und COPY-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_dump erzeugt 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_dumpall sichert 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 TABLE

    • ALTER TABLE

    • COPY (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.sql

    Dies stellt jede in der Dump-Datei gefundene Datenbank wieder her.

Zuerst ein Haftungsausschluss. Dieser Beitrag bietet eine allgemeine Anleitung zum Sichern einer Postgres-Datenbanktabelle. Die bereitgestellten Beispiele beziehen sich nicht auf eine bestimmte Tabelle oder Datenbank. Wenn Sie versuchen, eine bestimmte Tabelle zu sichern, sollten Sie auch Tabellen sichern, die sich auf die ursprünglichen Tabellen beziehen. Da Postgres eine relationale Datenbank ist, wird es immer Verweise zwischen mehreren Tabellen geben.

Dies ist ein „How to“-Dokument, das nur Beispielbefehle gibt. Wie es tatsächlich gemacht wird, hängt allein von der Person ab, die es durchführt, und von den spezifischen Anwendungsfällen. Bewahren Sie immer die Integrität der Daten, die Sie sichern möchten. Die Sicherung der gesamten Datenbank ist immer eine sichere Option, aber wenn man spezifische Tabellen sichert, muss man vorsichtig sein.

Zuerst ein Haftungsausschluss. Dieser Beitrag bietet eine allgemeine Anleitung zum Sichern einer Postgres-Datenbanktabelle. Die bereitgestellten Beispiele beziehen sich nicht auf eine bestimmte Tabelle oder Datenbank. Wenn Sie versuchen, eine bestimmte Tabelle zu sichern, sollten Sie auch Tabellen sichern, die sich auf die ursprünglichen Tabellen beziehen. Da Postgres eine relationale Datenbank ist, wird es immer Verweise zwischen mehreren Tabellen geben.

Dies ist ein „How to“-Dokument, das nur Beispielbefehle gibt. Wie es tatsächlich gemacht wird, hängt allein von der Person ab, die es durchführt, und von den spezifischen Anwendungsfällen. Bewahren Sie immer die Integrität der Daten, die Sie sichern möchten. Die Sicherung der gesamten Datenbank ist immer eine sichere Option, aber wenn man spezifische Tabellen sichert, muss man vorsichtig sein.

Zuerst ein Haftungsausschluss. Dieser Beitrag bietet eine allgemeine Anleitung zum Sichern einer Postgres-Datenbanktabelle. Die bereitgestellten Beispiele beziehen sich nicht auf eine bestimmte Tabelle oder Datenbank. Wenn Sie versuchen, eine bestimmte Tabelle zu sichern, sollten Sie auch Tabellen sichern, die sich auf die ursprünglichen Tabellen beziehen. Da Postgres eine relationale Datenbank ist, wird es immer Verweise zwischen mehreren Tabellen geben.

Dies ist ein „How to“-Dokument, das nur Beispielbefehle gibt. Wie es tatsächlich gemacht wird, hängt allein von der Person ab, die es durchführt, und von den spezifischen Anwendungsfällen. Bewahren Sie immer die Integrität der Daten, die Sie sichern möchten. Die Sicherung der gesamten Datenbank ist immer eine sichere Option, aber wenn man spezifische Tabellen sichert, muss man vorsichtig sein.

SQL-dump/pg_dump:

Die Idee hinter der SQL-Dump-Methode ist es, eine Textdatei mit SQL-Befehlen zu erstellen, die, wenn sie zurück an den Server übergeben wird, die Datenbank in demselben Zustand wiederherstellen, in dem sie sich zum Zeitpunkt des Dumps befand. PostgreSQL stellt das Dienstprogramm pg_dump für diesen Zweck bereit.

pg_dump ist ein effektives und umfassendes Tool, um Postgres-Datenbank-Backups zu erstellen und die Backups zur Wiederherstellung der Postgres-Datenbank zu verwenden. Es ist jedoch nicht nur auf die Datenbank beschränkt. Wir können pg_dump verwenden, um Tabellen zu sichern und diese dann zur Wiederherstellung einzelner Tabellen zu nutzen. Mit pg_dump können Sie die lokale Datenbank sichern und auf einer entfernten Datenbank wiederherstellen.

Die Idee hinter der SQL-Dump-Methode ist es, eine Textdatei mit SQL-Befehlen zu erstellen, die, wenn sie zurück an den Server übergeben wird, die Datenbank in demselben Zustand wiederherstellen, in dem sie sich zum Zeitpunkt des Dumps befand. PostgreSQL stellt das Dienstprogramm pg_dump für diesen Zweck bereit.

pg_dump ist ein effektives und umfassendes Tool, um Postgres-Datenbank-Backups zu erstellen und die Backups zur Wiederherstellung der Postgres-Datenbank zu verwenden. Es ist jedoch nicht nur auf die Datenbank beschränkt. Wir können pg_dump verwenden, um Tabellen zu sichern und diese dann zur Wiederherstellung einzelner Tabellen zu nutzen. Mit pg_dump können Sie die lokale Datenbank sichern und auf einer entfernten Datenbank wiederherstellen.

Die Idee hinter der SQL-Dump-Methode ist es, eine Textdatei mit SQL-Befehlen zu erstellen, die, wenn sie zurück an den Server übergeben wird, die Datenbank in demselben Zustand wiederherstellen, in dem sie sich zum Zeitpunkt des Dumps befand. PostgreSQL stellt das Dienstprogramm pg_dump für diesen Zweck bereit.

pg_dump ist ein effektives und umfassendes Tool, um Postgres-Datenbank-Backups zu erstellen und die Backups zur Wiederherstellung der Postgres-Datenbank zu verwenden. Es ist jedoch nicht nur auf die Datenbank beschränkt. Wir können pg_dump verwenden, um Tabellen zu sichern und diese dann zur Wiederherstellung einzelner Tabellen zu nutzen. Mit pg_dump können Sie die lokale Datenbank sichern und auf einer entfernten Datenbank wiederherstellen.

So sichern Sie eine Postgres-Datenbank:

Postgres Backup-Optionen Übersicht

Backup-Umfang

Verwendetes Tool

Ausgabedatei

Was enthalten ist

Wann verwenden

Einzeltabelle

pg_dump

.sql

Tabelle DDL + Daten

Isolierte Tabellenwiederherstellung oder -migration

Einzelne Datenbank

pg_dump

.sql

Alle Tabellen, Schema, Daten

Komplettes Datenbank-Backup

Alle Datenbanken

pg_dumpall

.sql

Jede Datenbank auf der Instanz

Serverweites Backup oder Migration


Backup einer Postgres-Tabelle:

$ /opt/msys/3rdParty/bin/pg_dump–table maincontrol.orgs -U ecuser pe -f ms_table.sql

Der obige Befehl ist ein Beispiel dafür, wie man eine spezifische Tabelle aus einer Postgres-Datenbank sichert. Mit dem obigen Befehl sichern wir die Tabelle ‘orgs’ im Schema ‘maincontrol’ von der Datenbank ‘pe’ zu der Datei ms_table.sql. Um eine spezifische Tabelle zu sichern, verwenden Sie die –table TABELLENAME Option im pg_dump-Befehl. Wenn es gleiche Tabellennamen in verschiedenen Schemata gibt, verwenden Sie die –schema SCHEMANAME Option.

  1. Sicherung einer spezifischen Postgres-Datenbank:

    $ /opt/msys/3rdParty/bin/pg_dump -U ecuser pe -f pe_dump.sql

    Dies ist ein Beispiel für das Sichern einer spezifischen Postgres-Datenbank. Mit dem obigen Befehl sichern wir die Datenbank für Message Central ‘pe’ in die Datei pe_dump.sql. Die Sicherungsdatei enthält create table-, alter table- und copy-Befehle für alle Tabellen in der ‘pe’-Datenbank.

  2. Sicherung aller Postgres-Datenbanken:

    $ /opt/msys/3rdParty/bin/pg_dumpall -U ecuser> all_dump.sql

    Sie können alle Datenbanken mit dem pg_dumpall-Befehl sichern. Der obige Befehl erstellt eine Sicherungskopie aller Datenbanken, die sich auf der Postgres-Instanz befinden, die auf einem bestimmten Server läuft. Um alle gesicherten Datenbanken aufzulisten, verwenden Sie den Befehl grep “^[\]connect” all.sql.

Postgres Backup-Optionen Übersicht

Backup-Umfang

Verwendetes Tool

Ausgabedatei

Was enthalten ist

Wann verwenden

Einzeltabelle

pg_dump

.sql

Tabelle DDL + Daten

Isolierte Tabellenwiederherstellung oder -migration

Einzelne Datenbank

pg_dump

.sql

Alle Tabellen, Schema, Daten

Komplettes Datenbank-Backup

Alle Datenbanken

pg_dumpall

.sql

Jede Datenbank auf der Instanz

Serverweites Backup oder Migration


Backup einer Postgres-Tabelle:

$ /opt/msys/3rdParty/bin/pg_dump–table maincontrol.orgs -U ecuser pe -f ms_table.sql

Der obige Befehl ist ein Beispiel dafür, wie man eine spezifische Tabelle aus einer Postgres-Datenbank sichert. Mit dem obigen Befehl sichern wir die Tabelle ‘orgs’ im Schema ‘maincontrol’ von der Datenbank ‘pe’ zu der Datei ms_table.sql. Um eine spezifische Tabelle zu sichern, verwenden Sie die –table TABELLENAME Option im pg_dump-Befehl. Wenn es gleiche Tabellennamen in verschiedenen Schemata gibt, verwenden Sie die –schema SCHEMANAME Option.

  1. Sicherung einer spezifischen Postgres-Datenbank:

    $ /opt/msys/3rdParty/bin/pg_dump -U ecuser pe -f pe_dump.sql

    Dies ist ein Beispiel für das Sichern einer spezifischen Postgres-Datenbank. Mit dem obigen Befehl sichern wir die Datenbank für Message Central ‘pe’ in die Datei pe_dump.sql. Die Sicherungsdatei enthält create table-, alter table- und copy-Befehle für alle Tabellen in der ‘pe’-Datenbank.

  2. Sicherung aller Postgres-Datenbanken:

    $ /opt/msys/3rdParty/bin/pg_dumpall -U ecuser> all_dump.sql

    Sie können alle Datenbanken mit dem pg_dumpall-Befehl sichern. Der obige Befehl erstellt eine Sicherungskopie aller Datenbanken, die sich auf der Postgres-Instanz befinden, die auf einem bestimmten Server läuft. Um alle gesicherten Datenbanken aufzulisten, verwenden Sie den Befehl grep “^[\]connect” all.sql.

Postgres Backup-Optionen Übersicht

Backup-Umfang

Verwendetes Tool

Ausgabedatei

Was enthalten ist

Wann verwenden

Einzeltabelle

pg_dump

.sql

Tabelle DDL + Daten

Isolierte Tabellenwiederherstellung oder -migration

Einzelne Datenbank

pg_dump

.sql

Alle Tabellen, Schema, Daten

Komplettes Datenbank-Backup

Alle Datenbanken

pg_dumpall

.sql

Jede Datenbank auf der Instanz

Serverweites Backup oder Migration


Backup einer Postgres-Tabelle:

$ /opt/msys/3rdParty/bin/pg_dump–table maincontrol.orgs -U ecuser pe -f ms_table.sql

Der obige Befehl ist ein Beispiel dafür, wie man eine spezifische Tabelle aus einer Postgres-Datenbank sichert. Mit dem obigen Befehl sichern wir die Tabelle ‘orgs’ im Schema ‘maincontrol’ von der Datenbank ‘pe’ zu der Datei ms_table.sql. Um eine spezifische Tabelle zu sichern, verwenden Sie die –table TABELLENAME Option im pg_dump-Befehl. Wenn es gleiche Tabellennamen in verschiedenen Schemata gibt, verwenden Sie die –schema SCHEMANAME Option.

  1. Sicherung einer spezifischen Postgres-Datenbank:

    $ /opt/msys/3rdParty/bin/pg_dump -U ecuser pe -f pe_dump.sql

    Dies ist ein Beispiel für das Sichern einer spezifischen Postgres-Datenbank. Mit dem obigen Befehl sichern wir die Datenbank für Message Central ‘pe’ in die Datei pe_dump.sql. Die Sicherungsdatei enthält create table-, alter table- und copy-Befehle für alle Tabellen in der ‘pe’-Datenbank.

  2. Sicherung aller Postgres-Datenbanken:

    $ /opt/msys/3rdParty/bin/pg_dumpall -U ecuser> all_dump.sql

    Sie können alle Datenbanken mit dem pg_dumpall-Befehl sichern. Der obige Befehl erstellt eine Sicherungskopie aller Datenbanken, die sich auf der Postgres-Instanz befinden, die auf einem bestimmten Server läuft. Um alle gesicherten Datenbanken aufzulisten, verwenden Sie den Befehl grep “^[\]connect” all.sql.

Wie man eine Postgres-Datenbank wiederherstellt

Postgres Restore Optionen Übersicht

Wiederherstellungsbereich

Verwendetes Tool

Eingabedatei

Wichtige Voraussetzung

Häufige Falle

Einzelne Tabelle

psql

Tabellen-Dump .sql

Tabelle darf nicht bereits existieren

„Bereits vorhanden“ Fehler

Einzelne Datenbank

psql

Datenbank-Dump .sql

Ziel-DB muss existieren

Unbeabsichtigtes Überschreiben von Daten

Alle Datenbanken

psql

Vollständiger Dump .sql

Superuser-Zugriff empfohlen

Mehr wiederherstellen als beabsichtigt


  1. Eine Postgres-Tabelle wiederherstellen:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql pe

    Der obige Befehl installiert die Tabelle, die im ms_table.sql-Datei gesichert wurde, in der ‚pe‘ Datenbank. Stellen Sie sicher, dass diese Tabelle nicht bereits existiert, sonst sehen Sie eine Menge ‚Bereits vorhanden‘ Fehler. Dieser Befehl erstellt die Tabelle und exportiert alle Daten in die neu erstellte Tabelle.

  2. Eine Postgres-Datenbank wiederherstellen:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sql

    Ähnlich wie bei der Wiederherstellung der Tabelle können wir den obigen Befehl verwenden, um die vollständige Datenbank wiederherzustellen. Hier stellen wir die ‚pe‘ Datenbank mit der Datei pe_dump.sql wieder her, die wir beim Sichern der Datenbank im oben beschriebenen Backup-Abschnitt erstellt hatten.

  3. Alle Datenbanken wiederherstellen:

    $ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sql

    Stellen Sie alle Datenbanken mit dem obigen Befehl wieder her. ‚all_dump.sql‘ war die Datei, die mit pg_dumpall erstellt wurde. Der obige Befehl wird uns alle Postgres-Datenbanken im exakten Zustand geben, in dem sie waren, als ein Dump vom ursprünglichen Datenbankserver erstellt wurde.

Postgres Restore Optionen Übersicht

Wiederherstellungsbereich

Verwendetes Tool

Eingabedatei

Wichtige Voraussetzung

Häufige Falle

Einzelne Tabelle

psql

Tabellen-Dump .sql

Tabelle darf nicht bereits existieren

„Bereits vorhanden“ Fehler

Einzelne Datenbank

psql

Datenbank-Dump .sql

Ziel-DB muss existieren

Unbeabsichtigtes Überschreiben von Daten

Alle Datenbanken

psql

Vollständiger Dump .sql

Superuser-Zugriff empfohlen

Mehr wiederherstellen als beabsichtigt


  1. Eine Postgres-Tabelle wiederherstellen:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql pe

    Der obige Befehl installiert die Tabelle, die im ms_table.sql-Datei gesichert wurde, in der ‚pe‘ Datenbank. Stellen Sie sicher, dass diese Tabelle nicht bereits existiert, sonst sehen Sie eine Menge ‚Bereits vorhanden‘ Fehler. Dieser Befehl erstellt die Tabelle und exportiert alle Daten in die neu erstellte Tabelle.

  2. Eine Postgres-Datenbank wiederherstellen:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sql

    Ähnlich wie bei der Wiederherstellung der Tabelle können wir den obigen Befehl verwenden, um die vollständige Datenbank wiederherzustellen. Hier stellen wir die ‚pe‘ Datenbank mit der Datei pe_dump.sql wieder her, die wir beim Sichern der Datenbank im oben beschriebenen Backup-Abschnitt erstellt hatten.

  3. Alle Datenbanken wiederherstellen:

    $ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sql

    Stellen Sie alle Datenbanken mit dem obigen Befehl wieder her. ‚all_dump.sql‘ war die Datei, die mit pg_dumpall erstellt wurde. Der obige Befehl wird uns alle Postgres-Datenbanken im exakten Zustand geben, in dem sie waren, als ein Dump vom ursprünglichen Datenbankserver erstellt wurde.

Postgres Restore Optionen Übersicht

Wiederherstellungsbereich

Verwendetes Tool

Eingabedatei

Wichtige Voraussetzung

Häufige Falle

Einzelne Tabelle

psql

Tabellen-Dump .sql

Tabelle darf nicht bereits existieren

„Bereits vorhanden“ Fehler

Einzelne Datenbank

psql

Datenbank-Dump .sql

Ziel-DB muss existieren

Unbeabsichtigtes Überschreiben von Daten

Alle Datenbanken

psql

Vollständiger Dump .sql

Superuser-Zugriff empfohlen

Mehr wiederherstellen als beabsichtigt


  1. Eine Postgres-Tabelle wiederherstellen:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql pe

    Der obige Befehl installiert die Tabelle, die im ms_table.sql-Datei gesichert wurde, in der ‚pe‘ Datenbank. Stellen Sie sicher, dass diese Tabelle nicht bereits existiert, sonst sehen Sie eine Menge ‚Bereits vorhanden‘ Fehler. Dieser Befehl erstellt die Tabelle und exportiert alle Daten in die neu erstellte Tabelle.

  2. Eine Postgres-Datenbank wiederherstellen:

    $ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sql

    Ähnlich wie bei der Wiederherstellung der Tabelle können wir den obigen Befehl verwenden, um die vollständige Datenbank wiederherzustellen. Hier stellen wir die ‚pe‘ Datenbank mit der Datei pe_dump.sql wieder her, die wir beim Sichern der Datenbank im oben beschriebenen Backup-Abschnitt erstellt hatten.

  3. Alle Datenbanken wiederherstellen:

    $ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sql

    Stellen Sie alle Datenbanken mit dem obigen Befehl wieder her. ‚all_dump.sql‘ war die Datei, die mit pg_dumpall erstellt wurde. Der obige Befehl wird uns alle Postgres-Datenbanken im exakten Zustand geben, in dem sie waren, als ein Dump vom ursprünglichen Datenbankserver erstellt wurde.

Andere Neuigkeiten

Mehr lesen aus dieser Kategorie

A person is standing at a desk while typing on a laptop.

Die komplette AI-native Plattform, die mit Ihrem Business skalierbar ist.

A person is standing at a desk while typing on a laptop.

Die komplette AI-native Plattform, die mit Ihrem Business skalierbar ist.