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 12/03/2014 16:45:00

Postgres.0
Membre

COPY problèeme avec QUOTE

Bonjour,
j'utilise un COPY FROM file.csv avec les options suivantes:
WITH DELIMITER AS '|'
CSV
QUOTE '"'
ESCAPE '\';
le souci c'est que les lignes de mon fichier contiennent une double côte chacune.
En fait, j'ai un champ de type texte dont les valeurs contiennent une double côte.
Comment je peux faire pour que mon fichier soit copier correctement dans ma table.

Merci

Hors ligne

#2 12/03/2014 23:40:33

gleu
Administrateur

Re : COPY problèeme avec QUOTE

La commande COPY que vous indiquez me semble correcte. Si ce n'est pas le cas, merci d'indiquer le début du fichier et le message d'erreur de la commande COPY.


Guillaume.

Hors ligne

#3 13/03/2014 15:39:33

Postgres.0
Membre

Re : COPY problèeme avec QUOTE

Merci gleu!
Pour ceux que ça intéresse, la solution est de mettre le champ en question entre double côtes et échapper avec \ (antislash) toutes les occurrences de double côte qui apparaîtraient à l’intérieur du champ en question.

Hors ligne

#4 21/10/2017 19:39:11

Deun
Membre

Re : COPY problèeme avec QUOTE

Je poste ici mais pas absoluement sûr d'avoir un pb de «quote"... on verra :

cat test_copy.txt 

NumOuv;NumOuvSPE;CodeBSS;X-L2;Y-L2;NomOuv
1;2600109;2600109;838786,83757;1926632,23418704;"Prise dans L'Ouveze de sa source au Menon Canarde A 443"

ps\copy : erreur d'analyse sur « "Ouvèze.ouvrages\" »
ql -d "SIG" -c '\copy \"Ouvèze.ouvrages\" from 'test_copy.txt' WITH ((FORMAT csv, HEADER)'

Voilà.Une «erreur d'annalyse» c'est pas bien parlant pour moi. Bon alors j'ai essayé avec "Prise dans L\'Ouveze de sa source au Menon Canarde A 443" pour voir ce que ça donne et c'est pareil.

La table :

CREATE TABLE "Ouvèze".ouvrages
(
  "NumOuv" integer NOT NULL, -- Ce numéro d'ouvrage n'est pas unique pour une prise d'eau. Il est unique administrativement
  "NumOuvSPE" character varying(20), -- id de pompage et non pas ID de prélèvement (évite les doublons)...
  "CodeBSS" integer, -- référence de la base de données BSS
  "X-L2" point, -- Coordonnée géographique, projection Lambert 2.
  "Y-L2" point, -- Coordonnée géographique, projection Lambert 2.
  "NomOuv" character varying(255)[]
)
WITH (
  OIDS=FALSE
);

Qu'est-ce que vous en dites ? Merci.

Hors ligne

#5 21/10/2017 21:40:54

rjuju
Administrateur

Re : COPY problèeme avec QUOTE

Il s'agit de la traduction de "parse error", c'est vrai que cette traduction est un peu malheureuse.


À priori vous n'avez pas besoin d'échapper vos guillemets doubles, mais vous avez besoin d'échapper le caractère « \ ». et les guillemets simples. De plus, le nom de votre table n'est pas "Ouvèze.ouvrages" mais "Ouvèze".ouvrage (d'ailleurs, pourquoi vouloir utiliser des caractères utf8 et un mix de majuscules / minuscules, c'est vraiment le meilleur moyen pour se compliquer la vie).  Il y a également deux parenthèses ouvrantes, et le format csv, comme son nom l'indique, attend une virgule en séparateur, il faut donc spécifier le délimiteur.  Pour finir, ce qui est présent pour le champ "NomOuv" est un chaîne de texte, pas un tableau de chaînes de texte.

Hors ligne

#6 22/10/2017 23:20:37

Deun
Membre

Re : COPY problèeme avec QUOTE

Merci. C'est vrai aussi que certaines de mes erreurs sont évidentes.

Donc...

psql -d "SIG" -c '\copy "Ouvèze".ouvrages ("NumOuv","NumOuvSPE","CodeBSS","X","Y","NomOuv") from 'test_copy.txt' WITH (FORMAT csv,DELIMITER ";",HEADER)'

...marche bien. Sauf qu'il a fallu que je transforme mes coordonnées françaises en format numérique anglais avec un "." au lieu d'une "," pour les décimales. Faut que je trouve autre chose.

Hors ligne

Pied de page des forums