it-swarm.com.de

PostgreSQL: Exportiere die resultierenden Daten aus der SQL-Abfrage nach Excel/CSV

Ich muss die resultierenden Daten aus einer Abfrage in PostgreSQL nach Excel/CSV exportieren.
Ich benutze PostgreSQL 8.2.11.

SQL error:

ERROR:  relative path not allowed for COPY to file
In statement:

COPY (select distinct(m_price) from m_product)TO '"c:\auto_new.txt"';
18
Ghostman

Beispiel mit Dateinamen im Unix-Stil:

COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv' format csv;

Lesen Sie das Handbuch zu COPY (Link zu Version 8.2).
Sie müssen ein absoluter Pfad für die Zieldatei verwenden. Stellen Sie sicher, dass Sie Dateinamen mit Leerzeichen doppelt angeben. Beispiel für MS Windows:

COPY (SELECT * FROM tbl)
TO E'"C:\\Documents and Settings\\Tech\Desktop\\myfile1.csv"' format csv;

In PostgreSQL 8.2 müssen Sie standardmäßig mit standard_conforming_strings = off umgekehrte Schrägstriche doppelt ausführen, da \ ein Sonderzeichen ist und von PostgreSQL interpretiert wird. Funktioniert in jeder Version. Es ist alles im feinen Handbuch :

Dateiname

Der absolute Pfadname der Eingabe- oder Ausgabedatei. Windows-Benutzer müssen möglicherweise einen E''-String und doppelte umgekehrte Schrägstriche verwenden, die als Pfadtrennzeichen verwendet werden.

Oder die moderne Syntax mit standard_conforming_strings = on (Standard seit Postgres 9.1):

COPY tbl  -- short for (SELECT * FROM tbl)
TO '"C:\Documents and Settings\Tech\Desktop\myfile1.csv"' (format csv);

Oder Sie können auch Schrägstriche für Dateinamen unter Windows verwenden.

Eine Alternative ist die Verwendung des meta-Befehls \copy des Standardterminalclients psql .

Sie können auch eine GUI wie pgadmin verwenden und für kleine Abfragen aus dem Ergebnisraster nach Excel kopieren/einfügen.

Eng verwandte Antwort:

Ähnliche Lösung für MySQL:

34

In PostgreSQL 9.4 erstellen Sie eine CSV-Datei mit dem Header in Ubuntu :

COPY (SELECT * FROM tbl) TO '/home/user/Desktop/result_sql.csv' WITH CSV HEADER;

Hinweis: Der Ordner muss beschreibbar sein.

6
Revol89

Das hat für mich funktioniert: 

COPY (SELECT * FROM table) 
    TO E'C:\\Program Files (x86)\\PostgreSQL\\8.4\\data\\try.csv';

In meinem Fall lag das Problem bei der Schreibberechtigung für einen speziellen Ordner (obwohl ich als Administrator arbeite). Nachdem ich den Pfad zum ursprünglichen Datenordner unter PostgreSQL geändert hatte, hatte ich Erfolg.

3
Celia

Verschiedene GUI-Tools wie Squirrel, SQL Workbench/J, AnySQL und ExecuteQuery können in Excel-Dateien exportiert werden.

Die meisten dieser Tools sind im PostgreSQL-Wiki aufgeführt:

http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools

Wenn Sie einen Fehler wie "ERROR: Server-Datei konnte nicht geöffnet werden"/Datei ": Berechtigung verweigert" können Sie Folgendes beheben:

Ich habe das gleiche Problem durchlaufen und dies ist die Lösung, die ich gefunden habe: Erstellen Sie einen neuen Ordner (zum Beispiel tmp) unter /home$ cd /homemake postgres den Besitzer dieses Ordners $ chown -R postgres: postgres tmp kopiert in tmp die Dateien, die Sie in die Datenbank schreiben möchten, und stellen Sie sicher, dass sie auch im Besitz von postgres ..__ sind. Sie sollten danach im Geschäft sein.

2
Michael

Das korrekte Skript für Postgres (Ubuntu) lautet:

COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv';
0
Michael