PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Copy from : ERROR: date/time field value out of range

Technique - général | Copy from : ERROR: date/time field value out of range

Par dvidof le 30/07/2007 - 15:48

Bonjour

J'utilise Copy pour charger les données depuis un fichier plat dans une table dont voici la description :

Column | Type | Modifiers
-----------+-----------------------------+-----------
to_ref | bigint | not null
to_entity | character(40) | not null
to_date | timestamp without time zone | not null
to_time | timestamp without time zone | not null
to_occ | text |

La commande copy est la suivante :

copy toto from '/tmp/x.dat' delimiters '~'

dans mon fichier x.dat il y a les données suivants ( un million d'enregistrement ):
...
3454495~TQKQD ~12.03.2007 00:00:00~01.01.1900 17:35:26~
3454496~HHKKF ~12.03.2007 00:00:00~01.01.1900 17:35:34~
3454497~BBIIL ~12.03.2007 00:00:00~01.01.1900 17:35:39~
3454501~IKKFFS ~12.03.2007 00:00:00~01.01.1900 17:43:16~
3454502~ADJUSTMENT ~12.03.2007 00:00:00~01.01.1900 17:44:33~
3454503~ADJUSTMENT ~12.03.2007 00:00:00~01.01.1900 17:46:16~
3454504~ADJUSTMENT ~12.03.2007 00:00:00~01.01.1900 17:47:52~
3454517~TFFFR ~13.03.2007 00:00:00~01.01.1900 08:53:20~
...

L'erreur est la suivante :
ERROR: date/time field value out of range: "13.03.2007 00:00:00"
HINT: Perhaps you need a different "datestyle" setting.
CONTEXT: COPY toto, line 89846, column to_date: "13.03.2007 00:00:00"

Pour info la ligne 89846 correspond a la dernière ligne de mes données.

Merci pour vos lumières

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Répondu sur la liste pgsql-fr-generale

Jean-Paul Argudo/ = 30 Juillet, 2007 - 17:08

Bonjour,

Comme je vous ai répondu sur la liste:
«
onjour,

$ psql < create_table.sql
CREATE TABLE

(recréé à partir de votre description)

jpargudo=# show datestyle ;
DateStyle
-----------
ISO, DMY
(1 ligne)

jpargudo=# copy toto from
'/home/jpargudo/PostgreSQL/misc/copy_problem/data.txt' delimiters '~';

COPY 8

jpargudo=# select * from toto ;
to_ref | to_entity | to_date
| to_time | to_occ
---------+------------------------------------------+---------------------+---------------------+--------
3454495 | TQKQD | 2007-03-12
00:00:00 | 1900-01-01 17:35:26 |
3454496 | HHKKF | 2007-03-12
00:00:00 | 1900-01-01 17:35:34 |
3454497 | BBIIL | 2007-03-12
00:00:00 | 1900-01-01 17:35:39 |
3454501 | IKKFFS | 2007-03-12
00:00:00 | 1900-01-01 17:43:16 |
3454502 | ADJUSTMENT | 2007-03-12
00:00:00 | 1900-01-01 17:44:33 |
3454503 | ADJUSTMENT | 2007-03-12
00:00:00 | 1900-01-01 17:46:16 |
3454504 | ADJUSTMENT | 2007-03-12
00:00:00 | 1900-01-01 17:47:52 |
3454517 | TFFFR | 2007-03-13
00:00:00 | 1900-01-01 08:53:20 |
(8 lignes)

Tout est ok.

Pouvez-vous vérifier cela:

jpargudo=# show datestyle ;
DateStyle
-----------
ISO, DMY
(1 ligne)

Si vous n'avez pas cela, mais par exemple MDY, comme je le soupçonne, on
tombe sur les messages d'erreurs que vous avez:

jpargudo=# set datestyle TO 'MDY';
SET

jpargudo=# copy toto from
'/home/jpargudo/PostgreSQL/misc/copy_problem/data.txt' delimiters '~';

ERREUR: Valeur du champ date/time en dehors des limites : «13.03.2007
00:00:00»
HINT: Peut-être avez-vous besoin d'un paramétrage «datestyle» différent.
CONTEXT: COPY toto, ligne 8, colonne to_date : «13.03.2007 00:00:00»

Mon avis, c'est que le paramétrage des "locales" de votre serveur n'est
pas fait, que vous avez probablement tout en langue "C" par défaut. Du
coup, vous *devrez* spécifier le DATESTYLE, comme on vous l'indique.

Par exemple, comparer le résultat de cette requête avec votre installation:

jpargudo=# select name, setting from pg_settings where name ~* 'lc';
name | setting
-------------+-------------
lc_collate | fr_FR.UTF-8
lc_ctype | fr_FR.UTF-8
lc_messages | fr_FR.UTF-8
lc_monetary | fr_FR.UTF-8
lc_numeric | fr_FR.UTF-8
lc_time | fr_FR.UTF-8
(6 lignes)

Je suis prêt à parier que vous avez des "C" partout, n'est-ce pas?

»
--
Jean-Paul ARGUDO
http://dalibo.com | http://dalibo.org


© PostgreSQLFr, tous droits réservés.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.