डिफ़ॉल्ट समयक्षेत्र स्थगित कर देता है


99

मैंने स्थापित किया है PostgreSQL 9और जो समय दिखा रहा है वह सर्वर समय से 1 घंटे पीछे है।

रनिंग Select NOW()शो:2011-07-12 11:51:50.453842+00

सर्वर दिनांक दिखाता है: Tue Jul 12 12:51:40 BST 2011

यह 1 घंटे पीछे है लेकिन इसमें दिखाया गया समयक्षेत्र phppgadminहै:TimeZone Etc/GMT0

मैं postgresql.confऔर सेटिंग में जाने की कोशिश की है

समयक्षेत्र = GMT

फिर से शुरू हो रहा है, लेकिन कोई बदलाव नहीं।

किसी भी विचार मैंने सोचा कि यह सिर्फ सर्वर समयक्षेत्र का उपयोग किया है, लेकिन स्पष्ट रूप से नहीं होगा ?!

समाधान !: मैंने GMTपहले सेट किया था और यह एक घंटे पीछे था। चारों ओर खोज के बाद पता चला कि मुझे इसे सेट करने की आवश्यकता थी Europe/London। यह ब्रिटिश गर्मियों के समय में +1 घंटे को ध्यान में रखता है, GMT नहीं करता है!

जवाबों:


113

समय क्षेत्र एक सत्र पैरामीटर है। तो, आप वर्तमान सत्र के लिए समय क्षेत्र बदल सकते हैं।

डॉक्टर को देखें ।

set timezone TO 'GMT';

या, SQL मानक के बाद और अधिक बारीकी से, SET TIME ZONEकमांड का उपयोग करें । "टाइम ज़ोन" के लिए दो शब्दों पर ध्यान दें, जहाँ ऊपर दिया गया कोड "टाइमज़ोन" शब्द का उपयोग करता है।

SET TIME ZONE 'UTC';

डॉक्टर अंतर बताते हैं:

सेट टाइम ज़ोन SQL मानक में परिभाषित सिंटैक्स का विस्तार करता है। मानक केवल संख्यात्मक टाइम ज़ोन ऑफ़सेट्स की अनुमति देता है जबकि PostgreSQL अधिक लचीले समय-क्षेत्र विनिर्देशों की अनुमति देता है। अन्य सभी सेट फीचर्स PostgreSQL एक्सटेंशन हैं।


2
मैंने यह स्थापित करने की कोशिश की है और यह काम नहीं कर रहा है, यह भी कि यह केवल सक्रिय सत्र के लिए सेट नहीं है। मैं इसे सभी डेटाबेस एक्ट के लिए स्थायी रूप से बदलना चाहता हूं, मैंने इसे आसानी से phpmyadmin में किया लेकिन कैंट इसे पोस्टग्रेजेक के लिए करने का एक तरीका खोजने में लगता है
ब्लू टावर्स

हाँ 'सेट टाइमज़ोन टू ..' केवल वर्तमान सत्र के लिए टाइमज़ोन सेट करता है और यदि आप Postgresql.conf में टाइमज़ोन कॉन्फ़िगरेशन पैरामीटर बदलते हैं, तो इसे सभी डेटाबेस के लिए टाइमज़ोन को बदलना चाहिए।
मुहम्मद उसामा

4
मैंने postgresql.conf में समयक्षेत्र को GMT में बदलकर प्रयास किया है और यह ठीक काम कर रहा है।
मुहम्मद उसामा

अधिक मानक (SQL युक्ति का अनुपालन) "टाइम ज़ोन" के लिए दो शब्द हैं SET TIME ZONE 'UTC';:। डॉक्टर को देखें ।
तुलसी बोर्के

102

इनमें timezoneसे चुनें :

SELECT * FROM pg_timezone_names;

और setनीचे दिए गए उदाहरण के रूप में:

ALTER DATABASE postgres SET timezone TO 'Europe/Berlin';

postgresउपरोक्त कथन के स्थान पर अपने DB नाम का उपयोग करें ।


4
इसके पूरा होने के बाद आपको पोस्टग्रैस्कल सेवा को फिर से शुरू करना होगा
जॉय पिंटो

24
@JoeyPinto सच नहीं है, यह जारी करने के लिए पर्याप्त है SELECT pg_reload_conf();:)
अल्फ़ा

4
मैं अपने डेटाबेस नाम के साथ बयान भाग गया और SELECT pg_reload_conf()सच लौट आए, लेकिन now()और select current_setting('TIMEZONE')'America / New_York' के मानों वापस जाने के लिए जारी है। क्या इसलिए कि मैं सुपरसुसर नहीं हूं?
नौमेनन

48

Postgres 9.1 में टाइमजोन परिवर्तन को पूरा करने के लिए आपको निम्न करना होगा:

1.- अपने "टाइमजोन" फोल्डर में /usr/share/postgresql/9.1/ में, एप्रीप्टिएट फाइल के लिए खोजें, मेरे मामले में "US.txt" होगा, इसमें, अपने क्षेत्र के निकटतम स्थान की खोज करें और कॉपी करें बाएं कॉलम में पहले अक्षर।

उदाहरण के लिए: यदि आप "न्यूयॉर्क" या "पनामा" में हैं तो यह "ईएसटी" होगा:

#  - EST: Eastern Standard Time (Australia)
EST    -18000    # Eastern Standard Time (America)
                 #     (America/New_York)
                 #     (America/Panama)

2.- अपनी postgresql.confफ़ाइल में "टाइमज़ोन" लाइन को अनलॉक करें और दिखाए गए अनुसार अपना टाइमज़ोन डालें:

#intervalstyle = 'postgres'
#timezone = '(defaults to server environment setting)'
timezone = 'EST'
#timezone_abbreviations = 'EST'     # Select the set of available time zone
                                        # abbreviations.  Currently, there are
                                        #   Default
                                        #   Australia

3.- पोस्टगार्ट्स को पुनः प्रारंभ करें


3
यह वास्तव में सही उत्तर है क्योंकि यह पीजीएसक्यूएल में हर प्रक्रिया के लिए टीएस परिवर्तन को डिफ़ॉल्ट बनाता है, न कि केवल वर्तमान उपयोगकर्ता।
jfreak53

15
मेरा सुझाव है कि आप उन 3 या 4 अक्षर कोड से पूरी तरह बचें । वे न तो मानकीकृत हैं और न ही अद्वितीय हैं। इसके बजाय उचित समय क्षेत्र के नाम (महाद्वीप SLASH शहर या क्षेत्र) का उपयोग करें। अपने स्वयं के उदाहरण का उपयोग करने के लिए, पनामा −05:00साल के दौर की ऑफसेट का उपयोग करता है जबकि न्यूयॉर्क डेलाइट सेविंग टाइम (डीएसटी) के साथ एक घंटे में बदलता है। एक समय क्षेत्र एक ऑफसेट से अधिक है; एक समय क्षेत्र में DST जैसे नियमों और विसंगतियों के भूत, वर्तमान और भविष्य के सेट शामिल हैं। तो, कहते हैं कि तुम क्या मतलब है: America/Panama, America/New_York, Europe/London, UTC(या Zulu)।
बेसिल बोर्के

3
PostGRE डॉक्स के अनुसार , आप अपने विशिष्ट डेटाबेस में मान्यता प्राप्त टाइमज़ोन नामों की एक सूची प्राप्त करने के लिए एक आंतरिक दृश्य की जांच कर सकते हैं, SELECT * FROM pg_timezone_namesजो संभवतः करने के लिए सुरक्षित है, दी गई 3-पार्टी साइटें आवश्यक रूप से अद्यतित नहीं होंगी। (या आउट-ऑफ-डेट) अपने स्वयं के विशेष डेटाबेस उदाहरण के रूप में।
सेलेडमनीडे

मेरे पास वह फ़ोल्डर नहीं हैpostgresql
SuperUberDuper

PostgreSQL को पुनरारंभ करने के बजाय, आप चला सकते हैं select pg_reload_conf()
एविव्स

42

स्वीकार किए जाते हैं जवाब से मुहम्मद ओसामा सही है।

कॉन्फ़िगरेशन पैरामीटर नाम

यह उत्तर दिखाता है कि पोस्टग्रेज-विशिष्ट कॉन्फ़िगरेशन पैरामीटर को निम्न के साथ कैसे सेट करें:

SET timezone TO 'UTC';

... जहाँ timezoneSQL कमांड नहीं है, यह विन्यास पैरामीटर का नाम है।

इसके लिए डॉक देखें ।

स्टैंडर्ड SQL कमांड

वैकल्पिक रूप से, आप SQL कमांड द्वारा परिभाषित SQL कमांड का उपयोग कर सकते हैं SET TIME ZONE:। इस सिंटैक्स में शब्दों की एक जोड़ी TIME ZONE"टाइमज़ोन" (वास्तविक SQL कमांड बनाम पैरामीटर नाम) को प्रतिस्थापित करती है, और कोई "TO" नहीं है।

SET TIME ZONE 'UTC';

इस आदेश और ऊपर वाले दोनों का एक ही प्रभाव है, केवल वर्तमान सत्र के लिए मूल्य निर्धारित करने के लिए। परिवर्तन को स्थायी बनाने के लिए, इस साहसी उत्तर को देखें ।

इसके लिए डॉक देखें ।

समय क्षेत्र का नाम

आप एक उचित समय क्षेत्र नाम निर्दिष्ट कर सकते हैं । इनमें से अधिकांश महाद्वीप / क्षेत्र हैं।

SET TIME ZONE 'Africa/Casablanca';

... या ...

SET TIME ZONE 'America/Montreal';

3 या 4 पत्र से बचें जैसे संक्षिप्त रूपों ESTया ISTके रूप में वे न मानकीकृत है और न ही अनूठा कर रहे हैं। समय क्षेत्र के नामों की सूची के लिए विकिपीडिया देखें ।

वर्तमान क्षेत्र प्राप्त करें

किसी सत्र के लिए वर्तमान समय क्षेत्र देखने के लिए, निम्नलिखित कथनों में से कोई एक आज़माएँ। तकनीकी रूप से हम SHOWरन-टाइम पैरामीटर प्रदर्शित करने के लिए कमांड को बुला रहे हैं ।

SHOW timezone ;

... या ...

SHOW time zone ;

यूएस / प्रशांत


4
SHOWपार्ट 5 प्रदान करने के लिए एकमात्र उत्तर होने के लिए बोनस पॉइंट
एरियल एलोन

रोजर कि, एरियल एलोन - और, अगले आदमी के लिए, जो उस समय क्षेत्र को एक चर में चुनना चाहता है ...SELECT current_setting('TIMEZONE')
वेल्स

10

पिछले उत्तरों के अलावा, यदि आप उपकरण pgAdmin III का उपयोग करते हैं, तो आप निम्नानुसार समय क्षेत्र निर्धारित कर सकते हैं:

  1. उपकरण> सर्वर कॉन्फ़िगरेशन> postgresql.conf के माध्यम से कॉन्फ़िगरेशन खोलें
  2. प्रविष्टि समयक्षेत्र के लिए देखें और खोलने के लिए डबल क्लिक करें
  3. मान बदलें
  4. कॉन्फ़िगरेशन परिवर्तन लागू करने के लिए सर्वर पुनः लोड करें (शीर्ष पर या सेवाओं के माध्यम से प्ले बटन)

PgAdmin III में कॉन्फिगर पोस्ट करता है


3

ध्यान दें कि कई तृतीय-पक्ष क्लाइंट के पास किसी भी Postgres सर्वर और \ या सत्र सेटिंग्स को ओवरलैप करने की अपनी समय-सीमा सेटिंग है।

उदाहरण के लिए, यदि आप 'IntelliJ IDEA 2017.3' (या DataGrips) का उपयोग कर रहे हैं, तो आपको समय-सीमा निर्धारित करनी चाहिए:

'DB स्रोत गुण' -> 'उन्नत' टैब -> 'VM विकल्प': -Duser.timezone = UTC + 06: 00

अन्यथा आप जो भी कहीं भी सेट करेंगे, उसके बावजूद आपको 'UTC' दिखाई देगा।


इसलिए इसे गर्मियों / सर्दियों के समय के बदलावों के साथ जोड़कर रखा जाना चाहिए?
Cpt सेनकेफस

1
@ Cpt.Senkfuss, मेरा मानना ​​है कि कुछ ऐसा है -Duser.timezone = ऑस्ट्रेलिया / तस्मानिया को भी काम करना चाहिए और गर्मियों में सर्दी के बदलावों का ध्यान रखना चाहिए।
ARA1307

यह एक जीवन रक्षक चाल है। मैं यह समझने की कोशिश कर रहा हूं कि अब 3 घंटे तक क्या गलत हो सकता है :) btw, पूर्णकालिक क्षेत्र नाम की कोशिश की और यह काम करता है। मेरे लिए यह -Duser.timezone = यूरोप / इस्तांबुल
काया

0

शायद सवाल से संबंधित नहीं है, लेकिन मुझे सीएसटी का उपयोग करने की आवश्यकता है, सिस्टम टाइमज़ोन को वांछित tz (अमेरिका / ...) में सेट करें और फिर पोस्टग्रैस्कल में टाइमज़ोन के मान को 'स्थानीय समय' पर सेट करें और यह एक आकर्षण के रूप में काम करे , current_time सही समय मुद्रण (Ubuntu 16 पर Postgresql 9.5)

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