wake-up-neo.net

psql - speichert die Ergebnisse des Befehls in einer Datei

Ich verwende den \dt von psql, um alle Tabellen in einer Datenbank aufzulisten, und ich muss die Ergebnisse speichern.

Wie lautet die Syntax, um die Ergebnisse eines Befehls psql in eine Datei zu exportieren?

202
pstanton

Aus der Hilfe von psql (\?):

\ o [DATEI] Alle Abfrageergebnisse an Datei oder Pipe senden

Die Reihenfolge der Befehle sieht folgendermaßen aus:

[[email protected] ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal

db=>\o out.txt
db=>\dt
db=>\q

[[email protected] ~]$ 
360
jhwist

Der Befehl psql \o wurde bereits von jhwist beschrieben.

Ein alternativer Ansatz ist die Verwendung des Befehls COPY TO zum direkten Schreiben in eine Datei auf dem Server. Dies hat den Vorteil, dass es in einem einfach zu analysierenden Format Ihrer Wahl ausgegeben wird - und nicht im tabellarischen Format von psql. Es ist auch sehr einfach, mit COPY FROM in eine andere Tabelle/Datenbank zu importieren.

NB! Dies erfordert Superuser-Berechtigungen und schreibt in eine Datei auf dem Server.

Beispiel: COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')

Erzeugt eine CSV-Datei mit ';' als Feldtrennzeichen.

Wie immer siehe die Dokumentation für Details

72
intgr

\copy, der ein postgres-Befehl ist, kann für jeden Benutzer funktionieren. Ich weiß nicht, ob es für\dt funktioniert oder nicht, aber die allgemeine Syntax wird über den folgenden Link reproduziert. Postgres SQL-Kopiersyntax

\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','

Das Obige speichert die Ausgabe der Auswahlabfrage in dem als CSV-Datei angegebenen Dateinamen

BEARBEITEN: 

Für meinen psql-Server funktioniert der folgende Befehl Dies ist eine ältere Version v8.5.

copy (select * from table1) to 'full_path_filename' csv header;
15
Aakash Gupta

Wenn Sie die folgende Fehlermeldung erhalten haben ufgtoolspg=> COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';') ; ERROR: must be superuser to COPY to or from a file HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

sie können es auf folgende Weise ausführen:

psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv

1
Daniil Mashkin

COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER; Dieser Befehl dient zum Speichern der gesamten Tabelle als csv 

1
Stephen

Ich gehe davon aus, dass es dafür einen internen psql-Befehl gibt, aber Sie können den Befehl script auch von util-linux-ng package ausführen:

BESCHREIBUNG Das Skript erstellt ein TypeScript für alles, was auf Ihrem Terminal gedruckt wird.

1
hlovdal