Come impostare il database Postgresql in modo da vedere la data come “MDY” in modo permanente


22

Come posso impostare il mio database per vedere la 'data' come "MDY" senza eseguire:

SET datestyle = "ISO, MDY";

ogni volta che sto provando ad accedervi? Sto usando Postgresql versione 9.1, Ubuntu 12.04. La mia locale di sistema, al momento dell'installazione del database era impostata su en_CA.utf8e l'ho cambiata di recente in en_US.utf8.

show lc_CTYPE

ritorna: -> "en_CA.UTF-8"

ma

show LC_CoLLATE

ritorna: -> "en_CA.UTF-8"

Risposte:


32

Avevo un problema molto simile anni fa, e poi ho scoperto che posso farlo

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

Prova questo. (Funziona in base al database, per una soluzione per tutti i tuoi database, imposta questo parametro in te postgresql.conf- grazie a @a_horse_with_no_name.)

Si noti che l'impostazione predefinita non è indipendente dalla locale . Tuttavia, dopo initdbaverlo impostato su quello che vuole, è possibile modificarlo da soli in postgresql.conf.

Il commento di @ swasheck mi ha fatto notare che con le mie impostazioni:

test=# SHOW lc_ctype;
      lc_ctype
--------------------
 Hungarian, Hungary
(1 row)


test=# SHOW lc_time;
      lc_time
--------------------
 Hungarian, Hungary
(1 row)

l'impostazione datestyleha il seguente effetto:

SET datestyle TO "ISO, MDY";

SELECT current_date;
    date
------------
 2012-06-21
(1 row)

Ora questo non è davvero previsto - ed è lo stesso anche su un altro server en_US.UTF8. Anche provare "ISO, DMY"mi suggerisce che la "ISO"parte ha più o meno la precedenza sull'altra parte quando si produce un output . Per i valori di input , ha l'effetto previsto, come riepilogato nella tabella seguente:

                          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 sopra che lo stile di input dato provoca un errore per la data datestyleimpostazione.

Dopo un'attenta lettura della documentazione, si può vedere che datestyleè una coppia di impostazioni parzialmente contrastanti:

Per motivi storici, questa variabile contiene due componenti indipendenti: la specifica del formato di output (ISO, Postgres, SQL o tedesco) e la specifica di input / output per l'ordine anno / mese / giorno (DMY, MDY o YMD).

Per me significa che bisogna trovare quello che si adatta alle loro esigenze con un po 'di sperimentazione, ma il modo migliore è lasciarlo al valore predefinito e usare sempre un formato di input non ambiguo. Due di questi sono 'YYYY-MM-DD'e 'YYYYMMDD'. Preferisco il primo - anche usando questo IRL;)

Nota: l' datestyleimpostazione (e altre impostazioni di runtime) postgresql.confpuò essere ignorata da un ALTER DATABASE bla SET datestyle ..., impostandola in modo permanente per un singolo database o SET datestyle TO ...impostandola per la sessione corrente. Quest'ultimo potrebbe essere utile quando si importano alcuni dati di terze parti con un formato data diverso.


3

Grazie @a_horse_with_no_name | @dezso | @ ypercubeᵀᴹ

Voglio scrivere una risposta semplice da implementare: Passaggi

Modo 1 : impostazione del tipo di dati per solo database

  1. show datestyle;mostra lo stile di data corrente "ISO, DMY " o "ISO, MDY"

  2. Ora, a seconda di ciò che si desidera in Postgres DMY o MDY impostata in seguito di query

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

    o

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

  3. Punto più importante: sempre dopo aver impostato il datestyle riavviare postgres

    sudo service postgresql restart

    O

    sudo /etc/init.d/postgresql restart

  4. Consente la configurazione del test

    se hai impostato DMY sotto la query dovrebbe funzionare per te

    Query: select '20/12/2016'::date output: "2016-12-20"

    O

    se hai impostato MDY sotto la query dovrebbe funzionare per te

    Query: select '12/19/2016'::date output: "2016-12-19"

Modo 2 : permanentemente: qualunque cosa tu abbia impostato nel file di configurazione verrà impostato in tutti i database che creerai in futuro

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

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

  2. Punto più importante: sempre dopo aver impostato il datestyle riavviare postgres

    sudo service postgresql restart

    O

    sudo /etc/init.d/postgresql restart

  3. Consente la configurazione del test

    se hai impostato DMY sotto la query dovrebbe funzionare per te

    Query: select '20/12/2016'::date output: "2016-12-20"

    O

    se hai impostato MDY sotto la query dovrebbe funzionare per te

    Query: select '12/19/2016'::date output: "2016-12-19"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.