Раньше у меня была очень похожая проблема, а потом я обнаружил, что могу
ALTER DATABASE database_name SET datestyle TO "ISO, MDY";
Попробуй это. (Это работает для каждой базы данных, для решения для всех ваших баз данных, установите этот параметр в вас postgresql.conf- благодаря @a_horse_with_no_name.)
Помните, что настройка по умолчанию не зависит от локали . Тем не менее, после того, как вы initdbустановите все, что захотите, вы можете изменить его самостоятельно в postgresql.conf.
Комментарий @ swasheck заставил меня заметить, что с моими настройками:
test=# SHOW lc_ctype;
lc_ctype
--------------------
Hungarian, Hungary
(1 row)
test=# SHOW lc_time;
lc_time
--------------------
Hungarian, Hungary
(1 row)
Настройка datestyleимеет следующий эффект:
SET datestyle TO "ISO, MDY";
SELECT current_date;
date
------------
2012-06-21
(1 row)
Теперь это не совсем ожидаемо - и то же самое на другом сервере с en_US.UTF8тоже. Попытка "ISO, DMY"тоже подсказывает мне, что эта "ISO"часть более или менее перекрывает другую часть при создании вывода . Для входных значений это имеет ожидаемый эффект, как показано в таблице ниже:
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
- означает выше, что данный стиль ввода приводит к ошибке для данного datestyleпараметра.
Внимательно прочитав документацию, вы увидите, что datestyleэто пара частично конфликтующих настроек:
По историческим причинам эта переменная содержит два независимых компонента: спецификацию выходного формата (ISO, Postgres, SQL или немецкий) и спецификацию ввода / вывода для упорядочивания года / месяца / дня (DMY, MDY или YMD).
Для меня это означает, что нужно немного найти тот, который соответствует их потребностям, немного поэкспериментировав, но лучший способ - оставить его по умолчанию и всегда использовать однозначный формат ввода. Два из них 'YYYY-MM-DD'и 'YYYYMMDD'. Я предпочитаю первое - даже используя этот IRL;)
Примечание. datestyleПараметр (и другие параметры времени выполнения) из postgresql.confможно переопределить ALTER DATABASE bla SET datestyle ..., установив его навсегда для отдельной базы данных или SET datestyle TO ...установив его для текущего сеанса. Последнее может быть полезно при импорте сторонних данных с другим форматом даты.