Vous n'êtes pas identifié(e).

#1 17/03/2016 16:49:58

Sogg33
Membre

Mauvaise mise en forme fichier.csv après extraction de ma BDD

Bonjour,

Je suis en train de créer un batch pour interroger ma BDD sur postgresql, exécuter mes fichiers .sql et exporter mes résultats vers des fichiers .csv

Ex de commande : psql -h localhost -p port -U users -d bdd <D:\Users\...\fichier.sql >> "D:\Users\fichier.csv"

Ça fonctionne très bien, sauf que mes fichiers csv ne s’organisent pas en tableau (alors que c’est le cas lorsqu’on exporte à partir de pgAmin). C’est-à-dire que toutes mes données se mettent dans la première colonne et ça devient très galère à lire.

Du coup je voulais des avis pour savoir s’il est possible d’ajouter quelque chose dans ma commande (par exemple préciser mon caractère séparateur) afin que la mise en forme se fasse. J’aimerai surtout éviter de tout reconvertir une fois les fichiers créés (mes fichiers csv sont vraiment lourds).

J’espère que vous pourrez m’aider.

Hors ligne

#2 17/03/2016 16:58:45

edlm
Membre

Re : Mauvaise mise en forme fichier.csv après extraction de ma BDD

Bonjour,


vous ne dites pas quelle(s) commande(s) vous utilisez dans votre fichier SQL qui expliquerait la sortie décrite (tout dans la 1ère colonne).


À priori vous devriez pouvoir utiliser la commande COPY ... TO STDOUT WITH ...


Éric

Hors ligne

#3 17/03/2016 18:09:41

Sogg33
Membre

Re : Mauvaise mise en forme fichier.csv après extraction de ma BDD

Merci pour votre aide.

Mes fichiers sql contiennent des requêtes telle que:
Select * from t_transcodage;

Si je veux utiliser la commande COPY je dois la mettre dans un fichier.sql et l'appeler dans mon batch?

Voici ma commande pour le moment:

COPY { t_transcodage[ ( tfa_cod, tfa_al, code_dep_compta) ] | (Select * from t_transcodage) }
TO { "D:\Users\...\fichier.csv" STDOUT }
  [ WITH ] ( [FORMAT csv, DELIMITER as ';'] )

Je ne suis pas sûr de la forme. Est-ce que je dois supprimer les "[]" et "|"?

Hors ligne

#4 17/03/2016 20:24:45

edlm
Membre

Re : Mauvaise mise en forme fichier.csv après extraction de ma BDD

Votre script (ou batch) si j'ai bien compris extrait les données de la base, les envoi sur la sortie standard qui est redirigée vers un fichier ?


Dans ce cadre, oui vous pouvez utiliser COPY en redirigeant sa sortie vers la sortie standard via la clause TO STDOUT.


Si vous avez repris les [] et | de la page de référence de la commande (documentation) oui il faut les supprimer mais ils ont un sens qu'il vaut mieux comprendre quand on lit la page.


Rapidement les caractères [] signifient que ce qu'il y a à l'intérieur est optionnel. Et le caractère '|' siginifie un choix entre plusieurs possibilités. Tout cela est expliqué dans la documentation.


Dans votre cas vous pouvez essayer (si j'ai bien compris ce que vous voulez obtenir... pas sûr...) la commande:

COPY t_transcodage(tfa_cod, tfa_al, code_dep_compta) TO STDOUT WITH (FORMAT csv, DELIMITER ';');

Dernière modification par edlm (17/03/2016 20:25:55)


Éric

Hors ligne

#5 18/03/2016 11:54:51

Sogg33
Membre

Re : Mauvaise mise en forme fichier.csv après extraction de ma BDD

Ca y est, ça marche.

Je suis parti de votre commande et en bidouillant un peu grâce à la doc j'ai obtenu une commande qui fonctionne:

\COPY (select * from matricemag) TO 'D:\Users\...\f.csv' WITH (FORMAT csv, DELIMITER ';')

Encore merci pour votre aide !

Hors ligne

Pied de page des forums