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