Jak ustawić bazę danych Postgresql, aby na stałe wyświetlała datę jako „MDY”

22

Jak ustawić moją bazę danych, aby wyświetlała „datę” jako „MDY” bez uruchamiania:

SET datestyle = "ISO, MDY";

za każdym razem, gdy próbuję uzyskać do niego dostęp? Używam Postgresql w wersji 9.1, Ubuntu 12.04. Moje ustawienia regionalne systemu w momencie instalacji bazy danych były ustawione na, en_CA.utf8a ostatnio to zmieniłem en_US.utf8.

show lc_CTYPE

zwraca: -> "en_CA.UTF-8"

ale

show LC_CoLLATE

zwraca: -> "en_CA.UTF-8"

Timka
źródło

Odpowiedzi:

32

Miałem bardzo podobny problem lata temu, a potem odkryłem, że potrafię

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

Spróbuj tego. (Działa to dla każdej bazy danych, dla rozwiązania dla wszystkich twoich baz danych, ustaw ten parametr w tobie postgresql.conf- dzięki @a_horse_w_nazwie.)

Należy pamiętać, że ustawienie domyślne nie jest niezależne od ustawień regionalnych . Jednak po ustawieniu initdbtego, co chce, możesz to zmienić samodzielnie w postgresql.conf.

Komentarz @ swasheck przypomniał mi, że w moich ustawieniach:

test=# SHOW lc_ctype;
      lc_ctype
--------------------
 Hungarian, Hungary
(1 row)


test=# SHOW lc_time;
      lc_time
--------------------
 Hungarian, Hungary
(1 row)

ustawienie datestylema następujący efekt:

SET datestyle TO "ISO, MDY";

SELECT current_date;
    date
------------
 2012-06-21
(1 row)

Teraz nie jest to tak naprawdę oczekiwane - i tak samo jest z innym serwerem en_US.UTF8. Próba "ISO, DMY"też sugeruje mi, że "ISO"część w większym lub mniejszym stopniu przesłania drugą część podczas tworzenia wyjścia . W przypadku wartości wejściowych ma oczekiwany efekt, jak podsumowano w poniższej tabeli:

                          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

- oznacza powyżej, że podany styl wprowadzania powoduje błąd dla danego datestyleustawienia.

Po uważnym przeczytaniu dokumentacji widać to datestyle jest to para częściowo sprzecznych ustawień:

Ze względów historycznych ta zmienna zawiera dwa niezależne komponenty: specyfikację formatu wyjściowego (ISO, Postgres, SQL lub niemiecki) oraz specyfikację wejścia / wyjścia dla porządku roku / miesiąca / dnia (DMY, MDY lub YMD).

Dla mnie oznacza to, że trzeba znaleźć ten, który odpowiada ich potrzebom przez odrobinę eksperymentowania - ale najlepszym sposobem jest pozostawienie domyślnego ustawienia i zawsze stosowanie jednoznacznego formatu wejściowego. Dwa z nich są'YYYY-MM-DD' i 'YYYYMMDD'. Wolę ten pierwszy - nawet używając tego IRL;)

Uwaga: datestyleustawienie (i inne ustawienia środowiska wykonawczego) postgresql.confmożna zastąpić ALTER DATABASE bla SET datestyle ..., ustawiając je na stałe dla pojedynczej bazy danych lub SET datestyle TO ...ustawiając dla bieżącej sesji. To ostatnie może być przydatne podczas importowania danych innych firm z innym formatem daty.

dezso
źródło
3

Dzięki {a_horse_with_no_name | @dezso | @ ypercubeᵀᴹ

Chcę napisać odpowiedź, która jest prosta do wdrożenia: Kroki

Sposób 1 : ustawienie stylu danych Tylko na bazę danych

  1. show datestyle;pokaże Ci obecny styl daty „ISO, DMY ” lub „ISO, MDY”

  2. Teraz w zależności od tego, co chcesz ustawić w postgres DMY lub MDY w poniższym zapytaniu

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

    lub

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

  3. Najważniejszy krok: zawsze po ustawieniu stylu danych uruchom ponownie postgres

    sudo service postgresql restart

    Lub

    sudo /etc/init.d/postgresql restart

  4. Pozwala przetestować konfigurację

    jeśli ustawiłeś DMY poniżej zapytanie powinno działać dla Ciebie

    Zapytanie: select '20/12/2016'::date Wyjście: "2016-12-20"

    Lub

    jeśli ustawiłeś MDY poniżej zapytanie powinno działać dla Ciebie

    Zapytanie: select '12/19/2016'::date Wyjście: "2016-12-19"

Sposób 2 : Stałe: cokolwiek ustawisz w pliku konfiguracyjnym, zostanie ustawione we wszystkich bazach danych, które utworzysz w przyszłości

  1. W /etc/postgresql/9.3/main/postgresql.conf

    datestyle = 'iso, dmy' LUB datestyle = 'iso, mdy'

  2. Najważniejszy krok: zawsze po ustawieniu stylu danych uruchom ponownie postgres

    sudo service postgresql restart

    Lub

    sudo /etc/init.d/postgresql restart

  3. Pozwala przetestować konfigurację

    jeśli ustawiłeś DMY poniżej zapytanie powinno działać dla Ciebie

    Zapytanie: select '20/12/2016'::date Wyjście: "2016-12-20"

    Lub

    jeśli ustawiłeś MDY poniżej zapytanie powinno działać dla Ciebie

    Zapytanie: select '12/19/2016'::date Wyjście: "2016-12-19"

Vijay
źródło