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.