2 votes

Postgres: Erreur lors de l'utilisation de COPY à partir d'un fichier CSV avec le type timestamptz

Je suis en train d'utiliser Postgres 9.5.3 (Sur Ubuntu 16.04) et j'ai une table avec certains champs timestamptz

...
datetime_received timestamptz NULL,
datetime_manufactured timestamptz NULL,
...

J'ai utilisé la commande SQL suivante pour générer un fichier CSV :

COPY (select * from tmp_table limit 100000) TO '/tmp/aa.csv' DELIMITER ';' CSV HEADER;

et j'ai utilisé :

COPY tmp_table FROM '/tmp/aa.csv' DELIMITER ';' CSV ENCODING 'UTF-8';

pour importer dans la table.

L'exemple des lignes dans le fichier CSV :

CM0030;;INV_AVAILABLE;2016-07-30 14:50:42.141+07;;2016-08-06 00:00:000+07;FAHCM00001;;123;;;;;1.000000;1.000000;;;;;;;;80000.000000;;;2016-07-30 14:59:08.959+07;2016-07-30 14:59:08.959+07;2016-07-30 14:59:08.959+07;2016-07-30 14:59:08.959+07;

Mais je rencontre l'erreur suivante lors de l'exécution de la deuxième commande :

ERROR:  invalid input syntax for type timestamp with time zone: "datetime_received"
CONTEXT:  COPY inventory_item, line 1, column datetime_received: "datetime_received"

Le fuseau horaire de ma base de données est :

 show timezone;
 TimeZone  
-----------
 localtime(GMT+7)
(1 row)

Y a-t-il une étape manquante ou une mauvaise configuration ?

Toute suggestion est appréciée !

1voto

Darling Wang Points 41

L'erreur que vous voyez signifie que Postgres essaie (et échoue) de convertir la chaîne 'datetime_received' en une valeur de type timestamp.

Cela se produit parce que la commande COPY essaie d'insérer la ligne d'en-tête dans votre table. Vous devez inclure une clause HEADER dans la commande COPY FROM, tout comme vous l'avez fait pour le COPY TO.

De manière plus générale, lors de l'utilisation de la commande COPY pour déplacer des données, assurez-vous que les commandes TO et FROM utilisent exactement les mêmes options. Spécifier ENCODING pour une commande et pas pour l'autre peut entraîner des erreurs, ou corrompre silencieusement des données, si votre encodage client n'est pas en UTF8.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X