PostgreSQL Backup & Restore

Datenbank sichern

Sichern der Datenbank db_name in die Datei db_name.sql:

pg_dump db_name  > db_name.sql

Datenbank zurücksichern

#Anlegen der Datenbank:
createdb --encoding=UTF8 db_name
#Rücksicherung:
psql db_name < db_name.sql

Daten einer Relation oder Abfrage exportieren

COPY { tablename [ ( column [, ...] ) ] | ( query ) }
TO { 'filename' | STDOUT }

Beispiele:

COPY (SELECT attrib1, attrib2 from mytable)
TO STDOUT WITH CSV;

Ausgabe mit TABs getrennt:

COPY (SELECT attrib1, attrib2 from mytable)
TO '/tmp/dump.csv' with delimiter E'\t' csv;

COPY führt dazu, dass der Datenbank-Server die Datei serverseitig wegschreibt. Aus Sicherheitsgründen darf dies nur ein superuser machen. Um auch dem Client zu ermöglichen, Daten clientseitig wegzuschreiben, gibt es den Befehl \COPY in psql: In psql wird einfach ein \ vor das COPY gestellt und der Semikolon (;) am Ende entfernt. Wichtig: Der ganze Ausdruck muss in einer Zeile stehen.

\COPY (SELECT attrib1, attrib2 from mytable) TO STDOUT WITH CSV

Wenn es umständlich erscheint, alles in eine Zeile zu schreiben, sollte man eine View verwenden und dieses im \COPY-Befehl verwenden:

CREATE VIEW myview AS (
    SELECT ...
    FROM ...
    WHERE ...
);

\COPY (SELECT * from view order by ...) TO STDOUT WITH CSV

\COPY ist naturgemäß etwas langsamer als COPY, da die Daten erst an den Client übergeben werden müssen.