J'essaie d'exporter une table PostgreSQL avec des en-têtes vers un fichier CSV via la ligne de commande, mais je l'obtiens pour exporter vers un fichier CSV, mais sans en-têtes.
Mon code ressemble à ceci:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
Réponses:
comme décrit dans le manuel .
la source
COPY
nécessite des privilèges d'administrateur. Utilisez-le à la\COPY
place si vous rencontrez des problèmes.COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
Depuis la ligne de commande psql:
pas de point-virgule à la fin.
la source
COPY
commande nécessite un accès administrateurpsql
approche également, on peut enregistrer la sortie partout où l'on a accès. Je viens d'utiliser l'psql
approche pour obtenir des données d'un serveur distant dans un fichier local. Très lisse.pg_dump -h remote | pg_restore -h localhost
.psql -c "\COPY (SELECT * FROM mytable) TO STDOUT" > mytable.csv
au lieu de simplement le nom de la table, vous pouvez également écrire une requête pour obtenir uniquement les données de colonne sélectionnées.
avec privilège administrateur
la source
\COPY ...
). Et au moins dans ma version de psql (9.5.2), je n'avais pas besoin de spécifier 'DELIMITER'; la valeur par défaut était une virgule.Lorsque je n'ai pas la permission d'écrire un fichier à partir de Postgres, je trouve que je peux exécuter la requête à partir de la ligne de commande.
la source
Cela marche
la source
-F ,
, et l'utilise|
comme séparateur. Merci!COPY
déclaration qui crée un fichier à réutiliserPour la version 9.5 que j'utilise, ce serait comme ceci:
la source
Cette solution a fonctionné pour moi en utilisant
\copy
.la source
La manière la plus simple (d'utiliser
psql
) semble être d'utiliser--csv
flag:la source
Voici comment je l'ai fait fonctionner Power Shell en utilisant pgsl connnect à une base de données Heroku PG:
J'ai d'abord dû changer l'encodage client en utf8 comme ceci:
\encoding UTF8
Ensuite, les données ont été transférées dans un fichier CSV:
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 laisse pas ajouter '\ t' comme délimiteur, j'ai donc utilisé ~ parce que c'est un caractère rarement utilisé.
la source
copier (les données de requête anysqwanttoexport) vers 'fileablsoutepathwihname' delimiter ',' en-tête csv;
L'utilisation de ce u peut également exporter des données.
la source
Je poste cette réponse car aucune des autres réponses données ici n'a vraiment fonctionné pour moi. Je ne pouvais pas utiliser
COPY
depuis Postgres, car je n'avais pas les bonnes autorisations. J'ai donc choisi "Exporter les lignes de la grille" et enregistré la sortie au format UTF-8.La
psql
version 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 que, apparemment, l'invite de commande Windows (j'utilisais Windows) se mêlait de l'encodage par elle-même. J'ai continué à recevoir cette erreur:La solution que j'ai finalement utilisée était d'é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 elle n'avait pas modifié l'encodage.
la source
Essayez ceci: "COPY products_273 FROM '\ tmp \ products_199.csv' DELIMITER ',' CSV HEADER"
la source