Раньше у меня была очень похожая проблема, а потом я обнаружил, что могу
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 ...
установив его для текущего сеанса. Последнее может быть полезно при импорте сторонних данных с другим форматом даты.