Miałem bardzo podobny problem lata temu, a potem odkryłem, że potrafię
ALTER DATABASE database_name SET datestyle TO "ISO, MDY";
Spróbuj tego. (Działa to dla każdej bazy danych, dla rozwiązania dla wszystkich twoich baz danych, ustaw ten parametr w tobie postgresql.conf- dzięki @a_horse_w_nazwie.)
Należy pamiętać, że ustawienie domyślne nie jest niezależne od ustawień regionalnych . Jednak po ustawieniu initdbtego, co chce, możesz to zmienić samodzielnie w postgresql.conf.
Komentarz @ swasheck przypomniał mi, że w moich ustawieniach:
test=# SHOW lc_ctype;
lc_ctype
--------------------
Hungarian, Hungary
(1 row)
test=# SHOW lc_time;
lc_time
--------------------
Hungarian, Hungary
(1 row)
ustawienie datestylema następujący efekt:
SET datestyle TO "ISO, MDY";
SELECT current_date;
date
------------
2012-06-21
(1 row)
Teraz nie jest to tak naprawdę oczekiwane - i tak samo jest z innym serwerem en_US.UTF8. Próba "ISO, DMY"też sugeruje mi, że "ISO"część w większym lub mniejszym stopniu przesłania drugą część podczas tworzenia wyjścia . W przypadku wartości wejściowych ma oczekiwany efekt, jak podsumowano w poniższej tabeli:
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
- oznacza powyżej, że podany styl wprowadzania powoduje błąd dla danego datestyleustawienia.
Po uważnym przeczytaniu dokumentacji widać to datestyle jest to para częściowo sprzecznych ustawień:
Ze względów historycznych ta zmienna zawiera dwa niezależne komponenty: specyfikację formatu wyjściowego (ISO, Postgres, SQL lub niemiecki) oraz specyfikację wejścia / wyjścia dla porządku roku / miesiąca / dnia (DMY, MDY lub YMD).
Dla mnie oznacza to, że trzeba znaleźć ten, który odpowiada ich potrzebom przez odrobinę eksperymentowania - ale najlepszym sposobem jest pozostawienie domyślnego ustawienia i zawsze stosowanie jednoznacznego formatu wejściowego. Dwa z nich są'YYYY-MM-DD' i 'YYYYMMDD'. Wolę ten pierwszy - nawet używając tego IRL;)
Uwaga: datestyleustawienie (i inne ustawienia środowiska wykonawczego) postgresql.confmożna zastąpić ALTER DATABASE bla SET datestyle ..., ustawiając je na stałe dla pojedynczej bazy danych lub SET datestyle TO ...ustawiając dla bieżącej sesji. To ostatnie może być przydatne podczas importowania danych innych firm z innym formatem daty.