web-dev-qa-db-fra.com

PostgreSQL: exporte les données résultantes d'une requête SQL vers Excel/CSV

J'ai besoin d'exporter les données résultant d'une requête dans PostgreSQL vers 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"';
18
Ghostman

Exemple avec un nom de fichier de style Unix:

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

Lisez le manuel relatif à COPY (lien vers la version 8.2).
Vous devez utiliser un chemin absolu pour le fichier cible. Assurez-vous de doubler les noms de fichiers avec des espaces Exemple pour MS Windows:

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

Dans PostgreSQL 8.2, avec standard_conforming_strings = off par défaut, vous devez doubler les barres obliques inverses, car \ est un caractère spécial interprété par PostgreSQL. Fonctionne dans n'importe quelle version. C'est tout dans le bon manuel :

nom du fichier

Le chemin d'accès absolu du fichier d'entrée ou de sortie. Les utilisateurs Windows peuvent avoir besoin d'utiliser une chaîne E'' et des doubles barres obliques inverses utilisées 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 utiliser également des barres obliques pour les noms de fichiers sous Windows.

Une alternative consiste à utiliser la méta-commande \copy du terminal client par défaut psql .

Vous pouvez également utiliser une interface graphique telle que pgadmin et copier/coller de la grille de résultats vers Excel pour les petites requêtes.

Réponse étroitement liée:

Solution similaire pour MySQL:

34
Erwin Brandstetter

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

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

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

6
Revol89

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 concernait l'autorisation d'écriture dans un dossier spécial (bien que je travaille en tant qu'administrateur), après avoir modifié le chemin d'accès au dossier de données d'origine sous PostgreSQL, j'ai réussi.

3
Celia

Plusieurs outils graphiques tels que Squirrel, SQL Workbench/J, AnySQL et ExecuteQuery peuvent être exportés vers des fichiers Excel.

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

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

2

Si vous avez une erreur du type "ERREUR: impossible d'ouvrir le fichier du serveur"/fichier ": Autorisation refusée", corrigez-le comme suit:

J'ai rencontré le même problème et voici la solution que j'ai trouvée: Créez un nouveau dossier (par exemple, tmp) sous /home$ cd /homemake postgres le propriétaire de ce dossier. $ chown -R postgres: postgres tmp copiez dans tmp les fichiers que vous souhaitez écrire dans la base de données et assurez-vous qu'ils appartiennent également à postgres . C'est tout. Vous devriez être en affaires après cela.

2
Michael

Le script correct pour postgres (Ubuntu) est:

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