Exporter la table PostgreSQL vers un fichier CSV avec des en-têtes

J'essaie d'exporter une table PostgreSQL avec des en-têtes dans un fichier CSV via la ligne de commande, mais je l'exporte dans un fichier CSV mais sans en-têtes. J'ai besoin de ces titres ainsi. Mon code se présente comme suit

COPY products_273 to '/tmp/products_199.csv' delimiters',';
342
demandé sur Arturo Herrero 2009-07-13 19:19:35

9 réponses

COPY products_273 TO '/tmp/products_199.csv' DELIMITER ',' CSV HEADER;

Comme décrit dans le manuel .

498
répondu Milen A. Radev 2014-03-02 22:41:32

Depuis la ligne de commande psql:

\COPY my_table TO 'filename' CSV HEADER

Pas de point-virgule à la fin.

172
répondu Laurent Debricon 2018-07-24 15:41:47

Au lieu de simplement nom de table, vous pouvez également écrire une requête pour obtenir uniquement les données de colonne sélectionnées.

COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;

Avec le privilège admin

\COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
88
répondu Dhruvil Thaker 2015-11-02 16:39:15

Quand je n'ai pas l'autorisation d'écrire un fichier de Postgres, je trouve que je peux exécuter la requête à partir de la ligne de commande.

psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv
67
répondu Brian 2016-12-01 17:32:00

Cela fonctionne

psql dbname -F , --no-align -c "SELECT * FROM TABLE"
31
répondu jordg 2012-01-13 06:17:52

Pour la version 9.5 que j'utilise, ce serait comme ceci:

COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
7
répondu maytham-ɯɐɥʇʎɐɯ 2017-08-13 00:26:04

Voici comment je l'ai fait fonctionner Power shell en utilisant pgsl connnect à une base de données PG Heroku:

J'ai d'abord dû changer l'encodage client en utf8 comme ceci: \encoding UTF8

Puis vidé les données dans un fichier CSV ceci:

\copy (SELECT * FROM my_table) TO  C://wamp64/www/spider/chebi2/dump.csv CSV DELIMITER '~'

J'ai utilisé ~ comme délimiteur parce que je n'aime pas les fichiers CSV, j'utilise généralement des fichiers TSV, mais il ne me laissera pas ajouter '\ t ' comme délimiteur, donc j'ai utilisé ~ parce que c'est un characeter rarement utilisé.

3
répondu Horse O'Houlihan 2016-11-26 19:31:29

Copie (anysql requête datawanttoexport) à "fileablsoutepathwihname' délimiteur ',' csv en-tête;

En utilisant ce u peut exporter des données aussi.

0
répondu user3767321 2016-05-10 06:44:46

Cette solution a fonctionné pour moi en utilisant \copy.

psql -h <host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"
0
répondu Atihska 2018-06-04 15:43:46