Solía tener un problema muy similar hace años, y luego descubrí que puedo hacer
ALTER DATABASE database_name SET datestyle TO "ISO, MDY";
Trata eso. (Esto funciona para cada base de datos, para una solución para todas sus bases de datos, configure este parámetro en usted postgresql.conf
, gracias a @a_horse_with_no_name).
Tenga en cuenta que la configuración predeterminada no es independiente de la configuración regional . Sin embargo, después de initdb
configurarlo a lo que quiera, puede cambiarlo usted mismo en el postgresql.conf
.
El comentario de @ swasheck me hizo notar que con mi configuración:
test=# SHOW lc_ctype;
lc_ctype
--------------------
Hungarian, Hungary
(1 row)
test=# SHOW lc_time;
lc_time
--------------------
Hungarian, Hungary
(1 row)
la configuración datestyle
tiene el siguiente efecto:
SET datestyle TO "ISO, MDY";
SELECT current_date;
date
------------
2012-06-21
(1 row)
Ahora bien, esto no se espera realmente, y también es lo mismo en otro servidor en_US.UTF8
. Intentarlo "ISO, DMY"
también me sugiere que la "ISO"
parte está anulando más o menos la otra parte al producir una salida . Para los valores de entrada , tiene el efecto esperado, como se resume en la tabla a continuación:
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
- significa arriba que el estilo de entrada dado produce un error para la datestyle
configuración dada .
Tras una lectura cuidadosa de la documentación, se puede ver que datestyle
hay un par de configuraciones parcialmente conflictivas:
Por razones históricas, esta variable contiene dos componentes independientes: la especificación del formato de salida (ISO, Postgres, SQL o alemán) y la especificación de entrada / salida para ordenar año / mes / día (DMY, MDY o YMD).
Para mí significa que uno tiene que encontrar el que mejor se adapte a sus necesidades experimentando un poco, pero la mejor manera es dejarlo en el valor predeterminado y usar siempre un formato de entrada inequívoco. Dos de estos son 'YYYY-MM-DD'
y 'YYYYMMDD'
. Prefiero el primero, incluso usando este IRL;)
Nota: la datestyle
configuración (y otras configuraciones de tiempo de ejecución) postgresql.conf
puede ser anulada por ALTER DATABASE bla SET datestyle ...
, configurándola permanentemente para una sola base de datos, o SET datestyle TO ...
configurándola para la sesión actual. Esto último puede ser útil al importar algunos datos de terceros con un formato de fecha diferente.