web-dev-qa-db-fra.com

Comment exporter une table au format CSV avec des en-têtes sur Postgresql?

J'essaie d'exporter une table PostgreSQL avec des en-têtes dans un fichier CSV via une ligne de commande. Cependant, je l'utilise pour exporter dans un fichier CSV, mais sans en-têtes.

Mon code se présente comme suit:

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

comme décrit dans le manuel .

568
Milen A. Radev

Depuis la ligne de commande psql:

\COPY my_table TO 'filename' CSV HEADER

pas de point-virgule à la fin.

203
Laurent Debricon

au lieu d'un 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 privilège administrateur

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

Lorsque je ne suis pas autorisé à écrire un fichier à partir de Postgres, je constate 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
91
Brian

Cela marche

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

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

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

Cette solution a fonctionné pour moi avec \copy.

psql -h <Host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"
5
Atihska

Voici comment je me suis débrouillé pour que Shell utilise pgsl connnect à une base de données Heroku PG:

Je devais d'abord changer le codage du client en utf8 comme ceci: \encoding UTF8

Puis jeté 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 cela ne me permet pas d'ajouter "\ t" comme délimiteur. J'ai donc utilisé ~ car son un caractère rarement utilisé.

3
Horse O'Houlihan

Je publie cette réponse car aucune des autres réponses données ici ne fonctionnait réellement pour moi. Je ne pouvais pas utiliser COPY à partir de Postgres, car je n'avais pas les autorisations appropriées. J'ai donc choisi "Exporter les lignes de la grille" et sauvegardé la sortie au format UTF-8.

La version psql donnée par @Brian ne fonctionnait pas non plus pour moi, pour une raison différente. La raison pour laquelle cela n'a pas fonctionné est qu'apparemment, l'invite de commande de Windows (j'utilisais Windows) se mêlait de l'encodage par elle-même. J'ai gardé cette erreur:

ERREUR: le caractère avec la séquence d'octets 0x81 dans le codage "WIN1252" n'a pas d'équivalent dans le codage "UTF8"

La solution que j’ai utilisée consistait à écrire un court script JDBC (Java) qui lisait le fichier CSV et émettait des instructions d’insertion directement dans ma table Postgres. Cela a fonctionné, mais l'invite de commande aurait également fonctionné si le codage n'avait pas été modifié.

0
Tim Biegeleisen

copier (n'importe quelle requête datawanttoexport) dans 'fileablsoutepathwihname' délimiter ',' en-tête csv;

En utilisant cet outil, vous pouvez également exporter des données.

0
user3767321