Postgresql veritabanını, tarihi kalıcı olarak “MDY” olarak görecek şekilde ayarlama


22

Veritabanımı çalıştırmadan 'tarih'i "MDY" olarak görecek şekilde nasıl ayarlayabilirim:

SET datestyle = "ISO, MDY";

her zaman erişmeye çalışıyorum? Postgresql sürüm 9.1, Ubuntu 12.04 kullanıyorum. Sistem yerel ayarlarım, veritabanı kurulumu sırasında ayarlandı en_CA.utf8ve yakın zamanda değiştirdim en_US.utf8.

show lc_CTYPE

döner: -> "en_CA.UTF-8"

fakat

show LC_CoLLATE

döner: -> "en_CA.UTF-8"

Yanıtlar:


32

Yıllar önce çok benzer bir sorun yaşadım ve sonra yapabileceğimi öğrendim.

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

Bunu dene. (Bu, tüm veritabanlarınız için bir çözüm için, veritabanı bazında çalışır, bu parametreyi sizin için ayarlayın postgresql.conf- @a_horse_with_no_name.)

Lütfen varsayılan ayarın yerel ayardan bağımsız olmadığını unutmayın . Ancak, initdbistediğini ayarladıktan sonra , içinde kendiniz değiştirebilirsiniz postgresql.conf.

@ swasheck adlı kullanıcının yorumu şunu belirtti:

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


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

ayar datestyleaşağıdaki etkiye sahiptir:

SET datestyle TO "ISO, MDY";

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

Şimdi bu gerçekten beklenmiyor - ve diğer sunucularda da aynı en_US.UTF8. Denemek "ISO, DMY"de bana, "ISO"bir çıktının üretilmesi sırasında parçanın diğer parçanın aşağı ya da yukarı baskın olduğunu gösteriyor . İçin giriş tablosunun altındaki özetlendiği gibi değerlere, bu beklenen bir etkiye sahiptir:

                          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

- yukarıda verilen girdi stilinin verilen datestyleayar için bir hatayla sonuçlandığı anlamına gelir .

Belgeleri dikkatlice okuduktan sonra datestyle, bunun kısmen birbiriyle çelişen bir ayar olduğu görülebilir :

Tarihsel nedenlerden dolayı, bu değişken iki bağımsız bileşen içerir: çıktı formatı belirtimi (ISO, Postgres, SQL veya Almanca) ve yıl / ay / gün siparişi için giriş / çıkış belirtimi (DMY, MDY veya YMD).

Benim için, kişinin deneylerine göre kendi gereksinimlerine uygun olanı bulması gerektiği anlamına geliyor - ancak en iyi yol varsayılanda bırakmak ve her zaman net olmayan bir giriş biçimi kullanmaktır. Bunlardan ikisi 'YYYY-MM-DD've 'YYYYMMDD'. Eski olanı tercih ediyorum - bu IRL'yi kullanırken bile

Not: datestyleayarı (ve diğer çalışma zamanı ayarları), tek bir veritabanı için kalıcı olarak ayarlayarak veya geçerli oturum için ayarlayarak postgresql.confgeçersiz kılınabilir . Bu sonuncusu, bazı üçüncü taraf verilerini farklı bir tarih biçiminde içe aktarırken yararlı olabilir.ALTER DATABASE bla SET datestyle ...SET datestyle TO ...


3

Thanks @a_horse_with_no_name | @dezso | @ ypercubeᵀᴹ

Uygulaması basit olan bir cevap yazmak istiyorum : Adımlar

Yol 1 : Yalnızca Veritabanı Başına Veri Stilini Ayarlama

  1. show datestyle;geçerli tarih stilini "ISO, DMY " veya "ISO, MDY" olarak göster

  2. Şimdi postgres'te ne istediğinizi bağlı olarak aşağıdaki sorguda ayarlanmış DMY veya MDY

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

    veya

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

  3. En önemli adım: Her zaman datestyle ayarını yaptıktan sonra postgres yeniden başlatın

    sudo service postgresql restart

    Veya

    sudo /etc/init.d/postgresql restart

  4. Test yapılandırmasına izin verir

    DMY ayarladıysanız, sorgunun sizin için çalışması gerekir

    Sorgu: select '20/12/2016'::date Çıktı: "2016-12-20"

    Veya

    MDY ayarını yaptıysanız, sorgunun sizin için çalışması gerekir.

    Sorgu: select '12/19/2016'::date Çıktı: "2016-12-19"

Yol 2 : Kalıcı olarak: config dosyasında ne ayarladıysanız, gelecekte oluşturacağınız tüm veritabanlarında belirlenecek

  1. /Etc/postgresql/9.3/main/postgresql.conf setinde

    datestyle = 'iso, dmy' VEYA datestyle = 'iso, mdy'

  2. En önemli adım: Her zaman datestyle ayarını yaptıktan sonra postgres yeniden başlatın

    sudo service postgresql restart

    Veya

    sudo /etc/init.d/postgresql restart

  3. Test yapılandırmasına izin verir

    DMY ayarladıysanız, sorgunun sizin için çalışması gerekir

    Sorgu: select '20/12/2016'::date Çıktı: "2016-12-20"

    Veya

    MDY ayarını yaptıysanız, sorgunun sizin için çalışması gerekir.

    Sorgu: select '12/19/2016'::date Çıktı: "2016-12-19"

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.