Comment exporter une sortie de requête PostgreSQL vers un fichier csv
Je vais avoir des problèmes export de ma sortie de PostgreSQL à partir d'un shell dans un fichier csv.
Mon script SQL est appelé script.sql
.
J'ai tapé la commande suivante dans mon shell:
psql congress -af script.sql &> filename.csv
Mais quand j'ai ouvert le filename.csv
fichier, les valeurs de toutes les colonnes sont entassés dans une seule colonne dans Excel csv (voir la capture d'écran jointe).
Ensuite, j'ai essayé d'une autre manière. J'ai édité mon script.sql
:
Copy (Select * From ...) To '/tmp/filename.csv' With CSV;
Ensuite j'ai tapé la commande suivante dans le shell dans la base de données dbname
.
\i script.sql
La sortie est:
COPY 162
Bien, ma sortie de la requête a 162 lignes.
De sorte que le 162 lignes de ma table de sortie ont été copiés dans le shell. Comment puis-je coller ou déplacer un fichier csv?
Ou, si je vais utiliser le nom de fichier.csv (capture d'écran ci-jointe), comment puis-je résoudre le format de csv/fichier Excel?
source d'informationauteur mflowww
Vous devez vous connecter pour publier un commentaire.
Syntaxe moderne:
Le résultat est le fichier CSV. L'ouvrir avec n'importe quel tableur à l'aide de l'appariement des délimiteurs. Par la documentation:
Comme Patrick a commentévous pouvez utiliser le correspondant psql méta commande
\copy
dans un mode similaire. Il écrit (et lit) les fichiers en local sur le client et ne nécessite pas de privilèges de super-utilisateur.Plus d'explication dans ces réponses:
de la première copie de vos informations de connexion dans ~/.pgpass et
Va "un peu" hors de la tangente, il y a une autre façon.
J'utilise la suite dans un windows script batch: -
L'astuce est de se rappeler l'-Une option. Il supprime les espaces en marge des données.
Je faire pour éviter les erreurs d'autorisation à partir de la COPIE de la commande ci-dessus avec le compte qui exécute le postgress ont pas les mêmes autorisations que le compte de l'exécution de mon fichier de commandes planifié.
Cela me met une liste de tables dans un schéma donné les résultats suivants:-
monschema|mytable1
monschema|mytable2
J'utilise ensuite POUR la commande de traitement par lots pour traiter chaque ligne. Si vous avez VRAIMENT envie d'un fichier CSV, tout ce que vous devez faire est celle-ci:-
Probablement pas le plus efficace des mécanismes, mais qui fonctionne bien sur un petit nombre de lignes de sortie.