स्थायी रूप से "MDY" के रूप में दिनांक देखने के लिए Postgresql डेटाबेस कैसे सेट करें


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

@ स्वैसेक की टिप्पणी ने मुझे ध्यान दिलाया कि मेरी सेटिंग्स के साथ:

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यह आंशिक रूप से परस्पर विरोधी सेटिंग्स की एक जोड़ी है:

ऐतिहासिक कारणों से, इस चर में दो स्वतंत्र घटक होते हैं: आउटपुट प्रारूप विनिर्देश (आईएसओ, पोस्टग्रेज, एसक्यूएल या जर्मन) और वर्ष / माह / दिन के आदेश के लिए इनपुट / आउटपुट विनिर्देश (डीएमवाई, एमडीवाई, या वाईएमडी)।

मेरे लिए इसका मतलब यह है कि किसी एक को ढूंढना होगा जो अपनी आवश्यकताओं को थोड़ा प्रयोग करके फिट करता है - लेकिन सबसे अच्छा तरीका यह है कि इसे डिफ़ॉल्ट पर छोड़ दें और हमेशा एक अस्पष्ट इनपुट प्रारूप का उपयोग करें। इनमें से दो हैं '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. अब आप नीचे दिए गए क्वेरी में DMY या MDY सेट पोस्टग्रेज में क्या चाहते हैं, उसके आधार पर

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

    या

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

  3. सबसे महत्वपूर्ण कदम: हमेशा सेट करने के बाद डेटास्टैट पुनरारंभ होता है

    sudo service postgresql restart

    या

    sudo /etc/init.d/postgresql restart

  4. कॉन्फ़िगरेशन का परीक्षण करें

    यदि आपने डीएमवाई निर्धारित किया है तो क्वेरी आपके लिए काम करनी चाहिए

    क्वेरी: 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. सबसे महत्वपूर्ण कदम: हमेशा सेट करने के बाद डेटास्टैट पुनरारंभ होता है

    sudo service postgresql restart

    या

    sudo /etc/init.d/postgresql restart

  3. कॉन्फ़िगरेशन का परीक्षण करें

    यदि आपने डीएमवाई निर्धारित किया है तो क्वेरी आपके लिए काम करनी चाहिए

    क्वेरी: select '20/12/2016'::date आउटपुट: "2016-12-20"

    या

    यदि आपने MDY निर्धारित किया है तो क्वेरी आपके लिए काम करनी चाहिए

    क्वेरी: select '12/19/2016'::date आउटपुट: "2016-12-19"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.