Aller au contenu

Migration vers 7.4 et supérieures

DateStyle

Dans les versions 7.3 et inférieures, PostgreSQL était tolérant à la violation de son DateStyle par défaut. En voici une illustration :

pagila=# SELECT version();
 PostgreSQL 7.3.21 on x86_64-unknown-linux-gnu, compiled by GCC gcc (Debian 4.4.5-8) 4.4.5

pagila=# SHOW DateStyle ;
 ISO with US (NonEuropean) conventions

pagila=# SELECT '12-25-2011'::date;
 2011-12-25

pagila=# SELECT '25-12-2011'::date;
 2011-12-25

Ce comportement est dangereux. Imaginons une application utilisant un datestyle dont la valeur est DMY connectée sur une instance PostgreSQL utilisant par défaut la valeur MDY. Si l’application ne déclare pas en début de session son datestyle, toutes ses dates seront considérées au format MDY du 1er au 12 du mois. Au-delà, les dates seront alors considérées au format DMY par le serveur, l’autre forme n’étant pas possible. Il en résulte un mélange de format des dates au sein de la base de données.

Voici ce même test à partir de la 7.4 :

template1=# SELECT version();
 PostgreSQL 7.4.30 on x86_64-unknown-linux-gnu, compiled by GCC gcc (Debian 4.4.5-8) 4.4.5

template1=# SHOW DateStyle ;
 ISO, MDY

template1=# SELECT '12-25-2011'::date;
 2011-12-25

template1=# SELECT '25-12-2011'::date;
ERROR:  date/time field value out of range: "25-12-2011"
HINT:  Perhaps you need a different "datestyle" setting.