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