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 initdb
tego, 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 datestyle
ma 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 datestyle
ustawienia.
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: datestyle
ustawienie (i inne ustawienia środowiska wykonawczego) postgresql.conf
moż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.