Postgres-Datenbank wiederherstellen: pg_restore -vs- nur mit psql

16

Ich speichere meine Postgres-Datenbank mit pg_dump (im Nur -Text-Format) und stelle sie dann einfach mit psql (mit der -fOption) wieder her.

Was wirft die Frage auf: Fehlt mir etwas, wenn ich pg_restore nicht verwende, was wie ein spezialisiertes Wiederherstellungstool (verglichen mit dem generischen psql) aussieht ?

Ich kann Optionen wie das Deaktivieren von Triggern und dergleichen mithilfe von pg_dumpParametern steuern . Wofür wird dann pg_restoreverwendet? Nicht-Klartext-Dump-Formate?

Marcus Junius Brutus
quelle
4
Aus dem Handbuch : " pg_restore ist ein Dienstprogramm zum Wiederherstellen einer PostgreSQL-Datenbank aus einem von pg_dump erstellten Archiv in einem der Nicht-
Nur

Antworten:

19

Wenn Sie einen Speicherauszug im SQL-Format erstellt haben, können Sie ihn nur verwenden psql.

Wenn Sie einen Speicherauszug im benutzerdefinierten Format ( pg_dump -Fc) oder im Verzeichnisformat ( pg_dump -Fd) erstellt haben, können und müssen Sie diesen verwenden pg_restore.

Benutzerdefinierte und Verzeichnisformat-Speicherauszüge bieten viele Vorteile gegenüber einfachen SQL-Skript-Speicherauszügen, und ich verwende sie ausschließlich. Sie können selektiv nur einige Tabellen / Schemas wiederherstellen und auswählen, ob nur Schemas, nur Daten oder beides beim Wiederherstellen usw. eingeschlossen werden sollen. Viele der Optionen, die Sie zum pg_dumpZeitpunkt von SQL- Speicherabbildern angeben müssen, können beim Wiederherstellen ausgewählt werden. Zeit, wenn Sie ein benutzerdefiniertes Format Dump und verwenden pg_restore.

Ohne Abwärtskompatibilität pg_dumpwäre das Standardformat -Fc(benutzerdefiniert).

Sie können einen SQL-Speicherauszug nicht in ein benutzerdefiniertes Format oder ein Verzeichnisformat konvertieren, ohne ihn in einer PostgreSQL-Datenbank wiederherzustellen und anschließend die wiederhergestellte Datenbank zu sichern.

Craig Ringer
quelle
Ist es auch möglich, Funktionen stapelweise umzubenennen und Daten zu bearbeiten, wie Sie es in einer SQL-Datei mit einem guten regulären Ausdruck tun könnten?
12.
1
Nein, aber Sie können es pg_restoreohne dbnameArgument in einen Speicherauszug im SQL-Format umwandeln, wenn Sie einen benötigen. Das Gegenteil ist nicht möglich.
Craig Ringer
@CraigRinger Gibt es einen Geschwindigkeitsunterschied zwischen psql und pg_dump für die Wiederherstellung?
Nikunj Sardhara
2
@NikunjSardhara Normalerweise nicht, aber pg_restoreunterstützt die parallele Wiederherstellung. Wenn Sie diese verwenden, ist sie VIEL schneller.
Craig Ringer