Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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')
@DanielVerite
http://blog-postgresql.verite.pro/
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
@DanielVerite
http://blog-postgresql.verite.pro/
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
Pages : 1