PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 21/09/2018 08:17:57

Mlan2
Membre

Import de fichiers de type CSV à partir de psql

Bonjour,

Je bloque sur un problème d'import de fichier type (*.csv) à partir de l'outil : psql.

Comment spécifier dans la ligne de commande le fait de ne pas spécifier l'usage de caractères d'encadrement, car par défaut le caractère point virgule est utilisé ? (selon la documentation).

J'ai bien noté l'existence du mot clé : QUOTE, mais celui-ci attend nécessairement un caractère.

D'avance merci de votre réponse.

Hors ligne

#2 21/09/2018 08:20:26

Mlan2
Membre

Re : Import de fichiers de type CSV à partir de psql

Désolé, j'ai indiqué dans mon post précédent une petite erreur.
Il ne s'agit pas du caractère point virgule mais du guillemet, utilisé par défaut.

Hors ligne

#3 21/09/2018 15:40:52

dverite
Membre

Re : Import de fichiers de type CSV à partir de psql

Le format CSV est défini (rétrospectivement) via 7 règles dans une RFC ici: https://tools.ietf.org/html/rfc4180 .


Si le fichier utilise des guillemets librement, c.a.d sans tenir compte du fait que c'est un caractère d'encadrement, il ne respecte pas les règles #5 et #7 de la spécification, donc ce n'est pas du CSV, c'est juste des champs séparés par un caractère, et on compte sur la chance ou sur une règle métier autre pour que les contenus ne comprennent ni ce caractère, ni des sauts de ligne (puisque l'encadrement via guillemets sert justement à gérer ces cas).


Pour l'importer quand même avec \copy, je pense qu'il faut spécifier un caractère de QUOTE qui n'est jamais utilisé dans le fichier. Il faut en plus qu'il fasse partie du jeu ASCII, donc un caractère de contrôle comme par exemple E'\001' ou E'\b' (code 8) pourraient faire l'affaire.

\copy nomdetable FROM stdin (format csv, quote E'\b')

Hors ligne

#4 21/09/2018 16:29:00

Mlan2
Membre

Re : Import de fichiers de type CSV à partir de psql

Merci de ta réponse.

J'avais essayé une commande similaire à l'aide du mot clé QUOTE sans y parvenir.

J'obtenais l'erreur suivante :

FROM STDIN WITH (FORMAT csv, QUOTE '\b', HEADER, DELIMITER '|')

ERREUR:  le guillemet COPY doit être sur un seul caractère sur un octet

J'ai bien réussi à charge mon fichier selon la façon indiquée.

Peux tu m'expliquer la notation E'\b' utilisée pour préciser le caractère d'encadrement ?

D'avance merci de ton retour.

Hors ligne

#5 21/09/2018 16:38:09

dverite
Membre

Re : Import de fichiers de type CSV à partir de psql

Le E devant une chaîne de caractères indique que l'antislash dans cette chaîne est un caractère d'échappement, sinon c'est un caractère normal (enfin sauf si standard_conforming_strings est à OFF mais en postgres moderne, il devrait être à ON).


Dans la doc c'est décrit ici: https://docs.postgresql.fr/10/sql-synta … ngs-escape

Hors ligne

#6 21/09/2018 16:50:29

Mlan2
Membre

Re : Import de fichiers de type CSV à partir de psql

Merci beaucoup pour ces précieuses informations.

Hors ligne

Pied de page des forums