Cómo configurar la base de datos Postgresql para ver la fecha como "MDY" permanentemente

22

¿Cómo puedo configurar mi base de datos para ver la 'fecha' como "MDY" sin ejecutar:

SET datestyle = "ISO, MDY";

¿Cada vez que intento acceder a él? Estoy usando Postgresql versión 9.1, Ubuntu 12.04. La configuración regional de mi sistema, en el momento de la instalación de la base de datos, estaba configurada en_CA.utf8y recientemente la cambié a en_US.utf8.

show lc_CTYPE

devuelve: -> "en_CA.UTF-8"

pero

show LC_CoLLATE

devuelve: -> "en_CA.UTF-8"

Timka
fuente

Respuestas:

32

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 initdbconfigurarlo 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 datestyletiene 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 datestyleconfiguración dada .

Tras una lectura cuidadosa de la documentación, se puede ver que datestylehay 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 datestyleconfiguración (y otras configuraciones de tiempo de ejecución) postgresql.confpuede 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.

dezso
fuente
3

Gracias @a_horse_with_no_name | @dezso | @ ypercubeᵀᴹ

Quiero escribir respuesta eso es simple de implementar: Pasos

Forma 1 : establecer datestyle por base de datos solamente

  1. show datestyle;mostrarle el estilo de fecha actual "ISO, DMY " o "ISO, MDY"

  2. Ahora dependiendo de lo que quieras en postgres DMY o MDY ajustado por debajo de consulta

    ALTER DATABASE "my_database_name" SET datestyle TO "ISO, DMY";

    o

    ALTER DATABASE "my_database_name" SET datestyle TO "ISO, MDY";

  3. Paso más importante: siempre después de configurar datestyle reiniciar postgres

    sudo service postgresql restart

    O

    sudo /etc/init.d/postgresql restart

  4. Permite probar la configuración

    si ha configurado DMY debajo de la consulta debería funcionar para usted

    Consulta: select '20/12/2016'::date Salida: "2016-12-20"

    O

    si ha configurado MDY consulta a continuación debería funcionar para usted

    Consulta: select '12/19/2016'::date Salida: "2016-12-19"

Forma 2 : permanentemente: lo que establezca en el archivo de configuración se establecerá en todas las bases de datos que creará en el futuro

  1. En /etc/postgresql/9.3/main/postgresql.conf set

    datestyle = 'iso, dmy' O datestyle = 'iso, mdy'

  2. Paso más importante: siempre después de configurar datestyle reiniciar postgres

    sudo service postgresql restart

    O

    sudo /etc/init.d/postgresql restart

  3. Permite probar la configuración

    si ha establecido DMY debajo de la consulta debería funcionar para usted

    Consulta: select '20/12/2016'::date Salida: "2016-12-20"

    O

    si ha configurado MDY, la consulta a continuación debería funcionar para usted

    Consulta: select '12/19/2016'::date Salida: "2016-12-19"

vijay
fuente