Je voudrais exécuter une requête à partir du shell (pas dans le client psql interactif) et lui faire imprimer la représentation CSV ou TSV de la sortie vers STDOUT. Comment faites-vous cela avec psql
ou l'un des outils de ligne de commande PostgreSQL?
Si vous utilisez PostgreSQL 8.2 ou plus récent, utilisez ceci pour CSV:
psql -c "COPY (<select query>) TO STDOUT WITH CSV"
et celle de TSV, avec des NULLs appropriés:
psql -c "COPY (<select query>) TO STDOUT WITH NULL AS ''"
Le formulaire CSV cite correctement tous les champs contenant le caractère guillemet double. Consultez la documentation PostgreSQL de votre version spécifique pour plus de détails et d'options pour COPY.
À partir de la réponse de Bohemian, j'ai trouvé ces drapeaux utiles:
psql my_database -U myuser -A -F , -X -t -f /path/to/query.sql -o /path/to/output.csv
EDITED: Utilisation de -F
Utilisez des virgules via -F
et utilisez le "mode de sortie de table non aligné" -A
:
psql my_database -U myuser -A -F , -c "select * from mytable"
Pour spécifier un tsv utilisez le délimiteur '\ t'
psql my_database -U myuser -F'\t' --no-align -f mysqlfile.sql -o outputfile.tsv
Pour spécifier un csv utilisez le délimiteur ','
psql my_database -U myuser -F',' --no-align -f mysqlfile.sql -o outputfile.csv
La commande copy qui vous permet de spécifier l'en-tête, les délimiteurs et les options de devis est également possible.
psql my_database -U my_user -c "copy (select a.id,b.id from my_table_a as a inner join my_table_b as b on b.id = a.id) to STDOUT"
Vous pouvez spécifier le séparateur de champ avec le paramètre de ligne de commande -F sur psql
Exporter en TSV AVEC EN-TÊTE
Vous pouvez inclure l'en-tête comme suit:
\COPY (SELECT * FROM tca) TO '/.../metab/tca.tsv' WITH DELIMITER E'\t' CSV HEADER;
\COPY (SELECT * FROM tca) TO '/...a/metab/tca.tsv' WITH NULL AS '' DELIMITER E'\t' CSV HEADER;
Par exemple. (PSQL):
[metabolism]# \COPY (SELECT * FROM tca) TO '/mnt/Vancouver/programming/data/metabolism/tca.tsv' WITH NULL AS '' DELIMITER E'\t' CSV HEADER;
COPY 22
FRAPPER:
[victoria@victoria tsv]$ pwd
/mnt/Vancouver/programming/data/metabolism/tsv
[victoria@victoria tsv]$ head -n3 tca.tsv
uuid src tgt rel rel_type
878b87de-0ca8-49a8-9f77-a24353e251d2 oxalosuccinic acid oxoglutaric acid 1.1.1.42 2
7fd9cf88-495b-491b-956e-294f19097923 isocitric acid oxoglutaric acid 1.1.1.41 2
[victoria@victoria csv]$