J'ai eu un problème très similaire il y a des années, puis j'ai découvert que je pouvais faire
ALTER DATABASE database_name SET datestyle TO "ISO, MDY";
Essayez ça. (Cela fonctionne sur une base par base de données, pour une solution pour toutes vos bases de données, définissez ce paramètre en vous postgresql.conf
- grâce à @a_horse_with_no_name.)
Veuillez noter que le paramètre par défaut n'est pas indépendant des paramètres régionaux . Cependant, après l'avoir initdb
réglé sur ce qu'il veut, vous pouvez le changer vous-même dans le postgresql.conf
.
Le commentaire de @ swasheck m'a fait remarquer qu'avec mes paramètres:
test=# SHOW lc_ctype;
lc_ctype
--------------------
Hungarian, Hungary
(1 row)
test=# SHOW lc_time;
lc_time
--------------------
Hungarian, Hungary
(1 row)
ce paramètre datestyle
a l'effet suivant:
SET datestyle TO "ISO, MDY";
SELECT current_date;
date
------------
2012-06-21
(1 row)
Maintenant, ce n'est pas vraiment prévu - et c'est la même chose sur un autre serveur avec en_US.UTF8
, aussi. Essayer "ISO, DMY"
, aussi, me suggère que la "ISO"
partie est plus ou moins prioritaire sur l'autre partie lors de la production d'une sortie . Pour les valeurs d' entrée , il a l'effet attendu, comme résumé dans le tableau ci-dessous:
input values
'2016/01/21' '01/21/2016' '21/01/2016' output
──────────────────────────────────────────────────────────────────────
ISO, YMD OK -- -- 2016-01-21
ISO, DMY -- OK -- 2016-01-21
ISO, MDY -- -- OK 2016-01-21
- signifie au-dessus que le style d'entrée donné entraîne une erreur pour le datestyle
paramètre donné .
En lisant attentivement la documentation, on peut voir qu'il datestyle
s'agit d'une paire de paramètres partiellement conflictuels:
Pour des raisons historiques, cette variable contient deux composants indépendants: la spécification du format de sortie (ISO, Postgres, SQL ou allemand) et la spécification d'entrée / sortie pour la commande année / mois / jour (DMY, MDY ou YMD).
Pour moi, cela signifie qu'il faut trouver celui qui correspond à leurs besoins par un peu d'expérimentation - mais la meilleure façon est de le laisser par défaut et de toujours utiliser un format d'entrée sans ambiguïté. Deux d'entre eux sont 'YYYY-MM-DD'
et 'YYYYMMDD'
. Je préfère l'ancien - même en utilisant cet IRL;)
Remarque: le datestyle
paramètre (et les autres paramètres d'exécution) de postgresql.conf
peut être remplacé par un ALTER DATABASE bla SET datestyle ...
, le définissant de manière permanente pour une seule base de données ou en le SET datestyle TO ...
définissant pour la session en cours. Ce dernier peut être utile lors de l'importation de certaines données tierces avec un format de date différent.