Suche…


Bemerkungen

pg_dumpall des Dateisystems anstatt pg_dumpall und pg_dump

Es ist sehr wichtig, dass Sie in diesem pg_start_backup() Funktionen pg_start_backup() vor und pg_stop_backup() danach pg_stop_backup() . Das Sichern von Dateisystemen ist ansonsten nicht sicher. Selbst ein ZFS- oder FreeBSD-Snapshot des Dateisystems, das ohne diese Funktionsaufrufe gesichert wurde, versetzt die Datenbank in den Wiederherstellungsmodus und kann Transaktionen verlieren.

Ich würde vermeiden, Dateisystem-Backups anstelle von regulären Postgres-Backups durchzuführen, sowohl aus diesem Grund als auch, weil Postgres-Backup-Dateien (insbesondere im benutzerdefinierten Format) äußerst vielseitig sind, um alternative Wiederherstellungen zu unterstützen. Da es sich um Einzeldateien handelt, sind sie auch weniger umständlich zu verwalten.

Eine Datenbank sichern

pg_dump -Fc -f DATABASE.pgsql DATABASE

Das -Fc wählt das "benutzerdefinierte Sicherungsformat" aus, das Ihnen mehr Leistung als -Fc SQL bietet. Weitere Informationen finden Sie unter pg_restore . Wenn Sie eine Vanilla-SQL-Datei benötigen, können Sie stattdessen Folgendes tun:

pg_dump -f DATABASE.sql DATABASE

oder auch

pg_dump DATABASE > DATABASE.sql

Backups wiederherstellen

psql < backup.sql

Eine sicherere Alternative verwendet -1 , um die Wiederherstellung in eine Transaktion einzuwickeln. -f gibt den Dateinamen an, anstatt die Shell-Umleitung zu verwenden.

psql -1f backup.sql

Benutzerdefinierte pg_restore müssen mit pg_restore und der Option -d wiederhergestellt werden, um die Datenbank anzugeben:

pg_restore -d DATABASE DATABASE.pgsql

Das benutzerdefinierte Format kann auch wieder in SQL konvertiert werden:

pg_restore backup.pgsql > backup.sql

Die Verwendung des benutzerdefinierten Formats wird empfohlen, da Sie auswählen können, welche Elemente wiederhergestellt werden sollen, und optional die parallele Verarbeitung aktivieren.

Möglicherweise müssen Sie einen pg_dump gefolgt von einem pg_restore ausführen, wenn Sie von einer postgresql-Version auf eine neuere aktualisieren.

Das gesamte Cluster sichern

$ pg_dumpall -f backup.sql

Dies funktioniert im Hintergrund, indem mehrere Verbindungen zum Server einmal für jede Datenbank hergestellt und pg_dump auf dieser Datenbank ausgeführt werden.

Manchmal können Sie versucht sein, dies als Cron-Job einzurichten. Sie möchten also das Datum sehen, an dem die Sicherung als Teil des Dateinamens erstellt wurde:

$ postgres-backup-$(date +%Y-%m-%d).sql

Beachten Sie jedoch, dass dies täglich große Dateien erzeugen kann. Postgresql hat einen viel besseren Mechanismus für regelmäßige Backups - WAL-Archive

Die Ausgabe von pg_dumpall reicht aus, um eine identisch konfigurierte Postgres-Instanz wiederherzustellen. Die Konfigurationsdateien in $PGDATA ( pg_hba.conf und postgresql.conf ) sind jedoch nicht Teil der Sicherung. Sie müssen sie daher separat sichern.

postgres=# SELECT pg_start_backup('my-backup');
postgres=# SELECT pg_stop_backup();

Um eine Sicherung des Dateisystems durchzuführen, müssen Sie diese Funktionen verwenden, um sicherzustellen, dass sich Postgres in einem konsistenten Zustand befindet, während die Sicherung vorbereitet wird.

Kopieren zum Importieren verwenden

So kopieren Sie Daten aus einer CSV-Datei in eine Tabelle

COPY <tablename> FROM '<filename with path>';

Einfügen eines user in eine Tabelle mit dem Namen user_data.csv in /home/user/ :

COPY user FROM '/home/user/user_data.csv';

So kopieren Sie Daten aus einer durch Pipes getrennten Datei in eine Tabelle

COPY user FROM '/home/user/user_data' WITH DELIMITER '|';

Hinweis: Ohne die Option with delimiter ist das Standardbegrenzungszeichen Komma ,

Kopfzeile beim Importieren ignorieren

Verwenden Sie die Header-Option:

COPY user FROM '/home/user/user_data' WITH DELIMITER '|' HEADER;

Hinweis: Wenn Daten in Anführungszeichen stehen, sind die Anführungszeichen der Daten standardmäßig in doppelte Anführungszeichen gesetzt. Wenn die Daten mit einem anderen Zeichen zitiert werden, verwenden Sie die Option QUOTE . Diese Option ist jedoch nur bei Verwendung des CSV-Formats zulässig.

Kopieren zum Exportieren verwenden

So kopieren Sie die Tabelle in den Standardbetrieb

COPY <Tabellenname> TO STDOUT (DELIMITER '|');

So exportieren Sie den Tabellenbenutzer in die Standardausgabe:

Benutzer KOPIEREN ZU STDOUT (DELIMITER '|');

Tabelle in Datei kopieren

Benutzer KOPIEREN FROM '/ home / user / user_data' WITH DELIMITER '|';

So kopieren Sie die Ausgabe der SQL-Anweisung in eine Datei

COPY (SQL-Anweisung) TO '<Dateiname mit Pfad>';

COPY (SELECT * FROM Benutzer WO Benutzer_Name LIKE 'A%') TO '/ Home / Benutzer / Benutzerdaten';

So kopieren Sie in eine komprimierte Datei

Benutzer KOPIEREN ZUM PROGRAMM 'gzip> /home/user/user_data.gz';

Hier wird das Programm gzip ausgeführt, um die Daten der Benutzertabellen zu komprimieren.

Verwenden von psql zum Exportieren von Daten

Daten können mit dem Kopierbefehl oder mit den Befehlszeilenoptionen des Befehls psql exportiert werden.

So exportieren Sie CSV-Daten aus dem Tabellenbenutzer in die CSV-Datei:

psql -p \<port> -U \<username> -d \<database> -A -F<delimiter> -c\<sql to execute> \> \<output filename with path>

psql -p 5432 -U postgres -d test_database -A -F, -c "select * from user" > /home/user/user_data.csv

Hier macht die Kombination von -A und -F den Trick.

-F ist als Trennzeichen anzugeben

-A or --no-align

Wechselt in den nicht ausgerichteten Ausgabemodus. (Der Standardausgabemodus ist ansonsten ausgerichtet.)



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow