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 initdb
averlo 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 datestyle
ha 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 datestyle
impostazione.
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' datestyle
impostazione (e altre impostazioni di runtime) postgresql.conf
può 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.