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"';
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:
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.
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.
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
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.
Le script correct pour postgres (Ubuntu) est:
COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv';