Як встановити базу даних Postgresql, щоб побачити дату як "MDY" назавжди


22

Як я можу встановити свою базу даних, щоб побачити "дату" як "MDY" без запуску:

SET datestyle = "ISO, MDY";

кожного разу, коли я намагаюся отримати доступ до нього? Я використовую Postgresql версії 9.1, Ubuntu 12.04. Моя локальна система, на момент встановлення бази даних була встановлена, en_CA.utf8і я нещодавно змінив її en_US.utf8.

show lc_CTYPE

повертає: -> "en_CA.UTF-8"

але

show LC_CoLLATE

повертає: -> "en_CA.UTF-8"

Відповіді:


32

У мене раніше була дуже схожа проблема, а потім виявила, що можу зробити

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


3

Дякую @a_horse_with_no_name | @dezso | @ ypercubeᵀᴹ

Я хочу написати відповідь, який простий у виконанні: кроки

Спосіб 1 : встановлення лише для бази даних

  1. show datestyle;показати вам стиль поточної дати "ISO, DMY " або "ISO, MDY"

  2. Тепер залежно від того, що ви хочете, щоб у postgres DMY або MDY встановлено запит нижче

    ALTER DATABASE "my_database_name" SET datestyle TO "ISO, DMY";

    або

    ALTER DATABASE "my_database_name" SET datestyle TO "ISO, MDY";

  3. Найважливіший крок: Завжди після встановлення datestyle перезавантажте postgres

    sudo service postgresql restart

    Або

    sudo /etc/init.d/postgresql restart

  4. Дозволяє перевірити конфігурацію

    якщо ви встановили DMY нижче, запит повинен працювати для вас

    Запит: select '20/12/2016'::date Вихід: "2016-12-20"

    Або

    якщо ви встановили MDY нижче, запит повинен працювати для вас

    Запит: select '12/19/2016'::date Вихід: "2016-12-19"

Спосіб 2 : Постійно: все, що ви встановите у конфігураційному файлі, буде встановлено у всіх базах даних, які ви створите в майбутньому

  1. В /etc/postgresql/9.3/main/postgresql.conf набір

    datestyle = 'iso, dmy' АБО datestyle = 'iso, mdy'

  2. Найважливіший крок: Завжди після встановлення datestyle перезавантажте postgres

    sudo service postgresql restart

    Або

    sudo /etc/init.d/postgresql restart

  3. Дозволяє перевірити конфігурацію

    якщо ви встановили DMY нижче, запит повинен працювати для вас

    Запит: select '20/12/2016'::date Вихід: "2016-12-20"

    Або

    якщо ви встановили MDY нижче, запит повинен працювати для вас

    Запит: select '12/19/2016'::date Вихід: "2016-12-19"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.