487 Stimmen

Wie exportiere ich eine Tabelle als CSV mit Überschriften in Postgresql?

Ich versuche, eine PostgreSQL-Tabelle mit Überschriften in eine CSV-Datei über die Befehlszeile zu exportieren, aber ich bekomme es in die CSV-Datei zu exportieren, aber ohne Überschriften.

Mein Code sieht wie folgt aus:

COPY products_273 to '/tmp/products_199.csv' delimiters',';

0 Stimmen

Verwenden Sie ein Postgres-System >= 8.1?

1 Stimmen

Ich denke, ich werde ein Upgrade auf die neuere Version planen, das wird das Leben so viel einfacher machen.

1 Stimmen

679voto

Milen A. Radev Punkte 56874
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);

wie beschrieben in der Handbuch .

9 Stimmen

Beachten Sie, dass das Argument HEADER erst mit 8.1 eingeführt wurde.

7 Stimmen

Die, sagen wir mal, ein bisschen eingerostet ist.

0 Stimmen

Vielen Dank für die Antwort, ich habe eine uralte Version 7 ;-(

263voto

Laurent Debricon Punkte 3989

Von der psql-Befehlszeile aus:

\COPY my_table TO 'filename' CSV HEADER

kein Semikolon am Ende.

25 Stimmen

Diese Version ist bei weitem die beste, da die COPY Befehl erfordert Admin-Zugang

2 Stimmen

Auch mit dem psql Ansatz kann man die Ausgabe überall speichern, wo man Zugang dazu hat. Ich habe gerade die psql Ansatz, um Daten von einem entfernten Server in eine lokale Datei zu übertragen. Sehr raffiniert.

0 Stimmen

Das ist viel besser, vor allem wenn Sie in einem Verzeichnis speichern, auf das Sie Zugriff haben, der Postgres-Benutzer aber nicht.

139voto

Dhruvil Thaker Punkte 1842

Statt nur den Tabellennamen können Sie auch eine Abfrage schreiben, um nur ausgewählte Spaltendaten zu erhalten.

COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;

mit Admin-Rechten

\COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;

0 Stimmen

Ich glaube nicht, dass Sie das abschließende Semikolon in der psql-Version des Befehls benötigen ( \COPY ... ). Und zumindest in meiner Version von psql (9.5.2) brauchte ich kein "DELIMITER" anzugeben; die Vorgabe war ein Komma.

0 Stimmen

Wie ändert sich die Syntax, wenn ich ausgewählte Felder aus der CSV-Datei in eine Tabelle kopiere?

134voto

Brian Punkte 1280

Wenn ich keine Berechtigung habe, eine Datei aus Postgres heraus zu schreiben, kann ich die Abfrage über die Befehlszeile ausführen.

psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv

10 Stimmen

Das Beste für "jede Umgebung". Am besten für 1. Sie benötigen keine speziellen Berechtigungen bei Postgresql oder beim Client; 2. kann einen relativen Pfad verwenden; und 3. ist sicher für das echte CSV-Format (sichere Zitate).

0 Stimmen

Das gefällt mir, weil es mit Sigularität funktioniert.

36voto

jordg Punkte 417

Das funktioniert

psql dbname -F , --no-align -c "SELECT * FROM TABLE"

12 Stimmen

Schön. Beachten Sie, dass dies nicht zu entkommen scheint Kommas innerhalb von Feldern, die sie enthalten.

0 Stimmen

Ich mag das, ohne die -F , und verwenden | als Trennzeichen. Danke!

2 Stimmen

Dies ist nicht das, was man gemeinhin als Exportfunktion bezeichnet, sondern lediglich eine kontrollierte Datenanzeige. Der Unterschied ist gering, aber wichtig: Diese Funktion ist eher dazu gedacht, von einem Menschen gelesen zu werden als die COPY Anweisung, die eine Datei zur Wiederverwendung erstellt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X