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.