PostgreSQL: exporter les données résultant de la requête SQL vers Excel / CSV

je dois exporter les données résultantes d'une requête dans PostgreSQL à Excel/CSV.

J'utilise 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"';
17
demandé sur Erwin Brandstetter 2011-11-14 13:07:30

6 réponses

Exemple avec style Unix nom de fichier:

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

Lire le manuel COPY (lien vers la version 8.2).

Vous devez utiliser un chemin absolu pour le fichier cible. Assurez-vous de citer des noms de fichier doubles avec des espaces. Exemple pour MS Windows:

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

PostgreSQL 8.2standard_conforming_strings = off par défaut, vous devez doubler les antislashs, parce que \ est un caractère spécial et interprété par PostgreSQL. Fonctionne dans n'importe quelle version. C'est tout dans la documentation:

nom du fichier

Le chemin d'accès absolu du fichier de sortie. Les utilisateurs de Windows peuvent avoir besoin d'utiliser un E'' string et double backslashes utilisés comme séparateurs de chemin.

Ou la syntaxe moderne avec standard_conforming_strings = on (par défaut depuis Postgres 9.1):

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

Ou vous pouvez utilisez aussi les slashes vers l'avant pour les noms de fichiers sous Windows.

Une alternative est d'utiliser le méta-commande \copy du client terminal par défaut psql.

vous pouvez aussi utiliser une interface graphique comme pgadmin et copier / coller à partir de la grille de résultats pour exceller pour les petites requêtes.

réponse étroitement liée:

solution similaire pour MySQL:

34
répondu Erwin Brandstetter 2017-05-23 11:47:09

PostgreSQL 9.4 pour créer un fichier CSV avec l'en-tête Ubuntu:

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

Remarque: Le dossier doit être accessible en écriture.

5
répondu Revol89 2015-08-19 17:09:20

Cela a fonctionné pour moi:

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

dans mon cas, le problème était avec la permission d'écrire dans un dossier spécial (bien que je travaille en tant qu'administrateur), après avoir changé le chemin vers le dossier de données original sous PostgreSQL j'ai eu du succès.

3
répondu Celia 2013-01-16 16:30:44

plusieurs outils GUI comme Squirrel, SQL Workbench / J, AnySQL, ExecuteQuery peuvent exporter vers des fichiers Excel.

la plupart de ces outils sont listés dans le wiki PostgreSQL:

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

2
répondu a_horse_with_no_name 2011-11-14 13:20:14

Si vous avez d'erreur du type "ERREUR: impossible d'ouvrir le serveur de fichier "/fichier": Permission denied" vous pouvez résoudre le problème:

J'ai traversé le même problème, et c'est la solution que j'ai trouvée: Créer un nouveau dossier (par exemple, tmp) sous /home $ cd /home faire postgres le propriétaire de ce dossier $ chown-R postgres: postgres tmp copie dans tmp les fichiers que vous voulez écrire dans la base de données, et assurez-vous qu'ils sont la propriété de postgres. C'est tout. Tu devrais être en affaires après ça.

2
répondu Michael 2014-09-04 08:20:25

le script correct pour postgres (Ubuntu) est:

COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv';
0
répondu Michael 2014-09-04 08:17:06