[RESOLU] Postgresql pb d'import fichier CSV avec la commande COPY

Postgresql pb d'import fichier CSV avec la commande COPY [RESOLU] - SQL/NoSQL - Programmation

Marsh Posté le 24-10-2014 à 15:41:34    

Bonjour à tous,
 
Je n'arrive pas à importer en masse des fichiers CSV via un programme PHP dans Postgresql avec la commande COPY FROM.
 
Mon programme s'arrête sur la levée d'une exception lorsque, à l'intérieur du fichier, j'ai soit des ' soit des ".
 
Pour certains fichiers CSV la commande c'est cette commande qui passe :
 

Code :
  1. COPY \"MA_TABLE\" (\"MON_CHAMP_1\",\"MON_CHAMP_1\" ) FROM '" . $filename . "' DELIMITER '|' ENCODING 'UTF-8' QUOTE '''' ESCAPE '\"' CSV HEADER;";


et pour d'autres celle-ci :
 

Code :
  1. COPY \"MA_TABLE\" (\"MON_CHAMP_1\",\"MON_CHAMP_1\" ) FROM '" . $filename . "' DELIMITER '|' ENCODING 'UTF-8' QUOTE '\"' ESCAPE '''' CSV HEADER;";


 
Voici un exemple d'une ligne qui ne passe pas dans un import :
 


20140429112708|d140-2 1/2" d56


 
Je ne sais pas comment faire.. Si je ne précise pas le séparateur de champ, les guillemets et le caractère d'échappement, ça plante.
 
Avez-vous une idée de la solution à adopter ? Merci par avance.
 
KibitO


Message édité par KibitO le 29-10-2014 à 11:15:22
Reply

Marsh Posté le 24-10-2014 à 15:41:34   

Reply

Marsh Posté le 26-10-2014 à 16:35:56    

Tes champs sont pas quotés, et apparemment contiennent des quotes, donc postgres se vautre, logique. Tu peux pas désactiver le quoting, donc je suggère de spécifier un caractère qui n'apparait pas dans le fichier, idéalement non imprimable, genre E'\0' (NUL) ou E'\b' (backslash).

 

IIRC par défaut ESCAPE prend la même valeur que QUOTE, donc juste spécifier QUOTE devrait fonctionner. À vérifier.


Message édité par masklinn le 26-10-2014 à 16:36:57

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 27-10-2014 à 11:09:34    

Salut et merci de m'avoir répondu. Je ne comprends pas ce que je dois faire avec ta solution. Je dois spécifier E'\0' à la place de '''' au niveau de QUOTE ?
 
Sinon j'avais pensé à tester le COPY TO avec une ligne contenant des quotes pour savoir comment il les échappait dans le fichier CSV de destination et réimporter ce même fichier avec un COPY FROM.

Reply

Marsh Posté le 27-10-2014 à 11:20:28    

KibitO a écrit :

Salut et merci de m'avoir répondu. Je ne comprends pas ce que je dois faire avec ta solution. Je dois spécifier E'\0' à la place de '''' au niveau de QUOTE ?


Ouaip. C'est in caractère qui n'est pas présent dans le fichier donc il va simplement ne rien quoter.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 27-10-2014 à 11:33:12    

:bounce: Putain un grand merci c'est passé ! J'ai juste spécifié QUOTE E'\b' et ça passe. E'\0' me générait une erreur.
 
Je vais quand même vérifier si mes 94 fichiers passent avec cette requête.

Reply

Marsh Posté le 29-10-2014 à 11:14:07    

Eh bien ça passe !! Merci beaucoup c'est parfait.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed