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.