Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
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
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.
Julien.
https://rjuju.github.io/
Hors ligne
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
Pages : 1