2012-08-02 14 views
22

मैं अपने डिफ़ॉल्ट (यूएस/सेंट्रल) के अलावा किसी अन्य चीज़ पर psql के लिए टाइमज़ोन कैसे सेट करूं? यहाँ मैं अब तक की कोशिश की है है:पोस्टग्रेस psql के लिए टाइमज़ोन कैसे सेट करें?

$ psql 
psql (9.1.4, server 9.0.4) 
... 

$ psql -c 'show timezone' 
    TimeZone 
------------ 
US/Central 

$ psql --set=timezone=US/Eastern -c 'show timezone' 
    TimeZone 
------------ 
US/Central 

$ psql --variable=timezone=US/Eastern -c 'show timezone' 
    TimeZone 
------------ 
US/Central 

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

संपादित करें # 2: मैं इसे गैर-इंटरैक्टिव मोड में चाहता हूं।

+0

टाइमज़ोन को बदलना ** SQL ** कथन 'सेट' का उपयोग करके किया जाना चाहिए, psql कमांड के माध्यम से नहीं (रिचर्ड का जवाब देखें) –

उत्तर

16

psql दस्तावेज़ का कहना है:

-v assignment 
--set=assignment 
--variable=assignment 
Perform a variable assignment, like the \set internal command. Note that 
you must separate name and value, if any, by an equal sign on the command line.... 

लेकिन समय क्षेत्र के साथ ऐसा प्रतीत नहीं होता काम करने के लिए है, क्योंकि इसी वजह से शायद:

These assignments are done during a very early stage of start-up, 
so variables reserved for internal purposes might get overwritten later. 

तो, ऐसा लगता है आपको या तो psql के अंदर एसईटी कमांड का उपयोग करें, या तो PGTZ पर्यावरण चर सेट करें:

PGTZ=PST8PDT psql -c 'show timezone' 
बेशक

, अगर आप समय क्षेत्र (न सिर्फ इस व्यक्ति psql उदाहरण के लिए) उपयोगकर्ता के लिए विश्व स्तर पर स्थापित करने के साथ ठीक कर रहे हैं, तो आप अपने .bashrc फ़ाइल में है कि चर सेट हो सकता है

+0

पीजीटीजेड! – dfrankow

+1

ध्यान दें कि आपको इसे निर्यात करने की आवश्यकता नहीं है। बैश प्रॉम्प्ट रन पर: PGTZ = US/Eastern psql -c 'show timezone' – dfrankow

+0

@dfrankow आप पूरी तरह से सही हैं, मैंने तय किया है कि – leonbloy

23
psql (9.1.4) 
Type "help" for help. 

richardh=> show timezone; 
TimeZone 
---------- 
GB 
(1 row) 

richardh=> set timezone='UTC'; 
SET 
richardh=> show timezone; 
TimeZone 
---------- 
UTC 
(1 row) 

richardh=> set timezone='US/Eastern'; 
SET 
richardh=> show timezone; 
    TimeZone 
------------ 
US/Eastern 
(1 row) 

richardh=> set timezone='blah'; 
ERROR: invalid value for parameter "TimeZone": "blah" 
+0

हां, मैं इसे इंटरैक्टिव मोड में कर सकता हूं, लेकिन मैं गैर-इंटरैक्टिव, यानी -सी के साथ भागो – dfrankow

+0

रिचर्ड, यह अस्थायी रूप से काम करता है, जब मैं एसक्यूएल फलक बंद करता हूं तो यह पुराना होता है, क्या आप स्थायी समाधान –

+0

@ चिंतन प्रदान कर सकते हैं, यह वास्तव में एक अलग सवाल है, लेकिन आप "वैकल्पिक उपयोगकर्ता" या "वैकल्पिक डेटाबेस" का उपयोग कर सकते हैं "विन्यास को स्थायी रूप से सेट करने के लिए। जीत के लिए –

12

ALTER उपयोगकर्ता postgres (लिनक्स में हैं) एसईटी टाइमज़ोन = 'एशिया/टोक्यो';

+1

यह मेरे लिए अमेज़ॅन आरडीएस के साथ काम नहीं करता है, बिना किसी पुनरारंभ की आवश्यकता है। धन्यवाद! –

+0

आपका स्वागत है! –

0

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

उदा। आप 'IntelliJ विचार 2017.3' (या DataGrips) का उपयोग कर रहे हैं, तो आप समय क्षेत्र परिभाषित के रूप में करना चाहिए:

'DB source properties' -> 'Advanced' tab -> 'VM Options': -Duser.timezone=UTC+06:00

अन्यथा आप जो कुछ भी आप कहीं और स्थापित किया है के बावजूद 'यूटीसी' देखेंगे।