Question

Je suis en train d'exporter une table PostgreSQL avec des titres à un fichier CSV via la ligne de commande, mais je reçois d'exporter vers un fichier CSV, mais sans en-têtes.

Mon code se présente comme suit:

COPY products_273 to '/tmp/products_199.csv' delimiters',';
Était-ce utile?

La solution

COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);

comme décrit dans le rel="noreferrer"> manuel.

Autres conseils

De la ligne de commande psql:

\COPY my_table TO 'filename' CSV HEADER

ne point-virgule à la fin.

au lieu de citer que la table, vous pouvez également écrire une requête pour obtenir des données de colonne sélectionnées uniquement.

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

avec privilège admin

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

Quand je n'ai pas la permission d'écrire un fichier à partir 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

Cela fonctionne

psql dbname -F , --no-align -c "SELECT * FROM TABLE"

Pour la version 9.5, je l'utilise, ce serait comme ceci:

COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);

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 ',');"

Voici comment je l'ai eu shell puissance de travail en utilisant PGsl connnect à une base de données Heroku PG:

Je devais d'abord changer l'encodage du client en UTF8 comme ceci: \encoding UTF8

Ensuite, les données à déversée un fichier CSV ceci:

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

je ~ comme délimiteur parce que je n'aime pas les fichiers CSV, je l'habitude d'utiliser des fichiers TSV, mais il ne me laisse pas ajouter « \ t » comme séparateur, donc je ~ parce que son characeter rarement utilisé.

copie (anysql de datawanttoexport d'interrogation) à délimiteur 'de fileablsoutepathwihname' '' en-tête de format CSV;

L'utilisation de ce u peut exporter des données également.

Je signale cette réponse car aucune des autres réponses données ici a effectivement travaillé pour moi. Je ne pouvais pas utiliser COPY à partir de Postgres, parce que je ne l'ai pas les bonnes permissions. J'ai donc choisi « lignes de la grille à l'exportation » et enregistré la sortie en UTF-8.

La version donnée par psql ne fonctionne aussi @ Brian pas pour moi, pour une autre raison. La raison pour laquelle il ne fonctionne pas est qu'apparemment l'invite de commande Windows (j'utilisais Windows) se mêlait autour de l'encodage lui-même. Je continuais à obtenir cette erreur:

  

ERROR: caractère de séquence d'octets 0x81 dans le codage « de WIN1252 » n'a pas d'équivalent dans le codage « UTF-8 »

La solution que je fini par utiliser était d'écrire un script court JDBC (Java) qui a lu le fichier CSV et les instructions d'insertion émises directement dans ma table de Postgres. Cela a fonctionné, mais l'invite de commande aussi aurait travaillé il pas en train de modifier le codage.

scroll top