2012-03-19 2 views
39

प्रश्न कम है: यदि मेरे पास समय क्षेत्र के बिना कॉलम प्रकार टाइमस्टैम्प में पहले से डेटा है, तो यदि मैं समय क्षेत्र के साथ टाइमस्टैम्प पर टाइप सेट करता हूं, तो पोस्टग्रेस्क्ल के साथ क्या करता है यह डेटा?पोस्टग्रेएसक्यूएल समय क्षेत्र के बिना टाइमस्टैम्प टाइप करें -> समय क्षेत्र

+0

आप ठीक कह रहे हैं, लेकिन जब तक मैं अपने आवेदन/ऊपर आग db/जो कुछ भी, इस सवाल का जवाब हो सकता है। – gyorgyabraham

+5

@a_horse_with_no_name क्योंकि "यह एक बार काम करता है" यह जानने के लिए एक बहुत ही खराब तरीका है कि यह हर समय क्या करेगा! –

+0

@couling: तो आप यह कह रहे हैं कि कई बार चलने पर बयानों का एक ही सेट अलग-अलग परिणाम देगा? भले ही सभी इनपुट पैरामीटर समान हों? उस स्थिति में dbhenur का जवाब कुछ भी साबित नहीं करेगा क्योंकि आपके द्वारा उस कथन को चलाने के अनुसार एक बार यह गारंटी नहीं देता है कि यह अगली बार उसी तरह काम करेगा। –

उत्तर

38

यह स्थानीयसमय में वर्तमान मूल्य रखता है और करने के लिए समय क्षेत्र सेट अपने स्थानीयसमय का ऑफ़सेट:

अगर [का उपयोग खंड है] छोड़े गए:

create table a(t timestamp without time zone, t2 timestamp with time zone); 
insert into a(t) values ('2012-03-01'::timestamp); 
update a set t2 = t; 
select * from a; 
      t   |   t2   
---------------------+------------------------ 
2012-03-01 00:00:00 | 2012-03-01 00:00:00-08 

alter table a alter column t type timestamp with time zone; 
select * from a; 
      t   |   t2   
------------------------+------------------------ 
2012-03-01 00:00:00-08 | 2012-03-01 00:00:00-08 

Alter Table के लिए मैनुअल के अनुसार , डिफ़ॉल्ट रूपांतरण पुराने डेटा प्रकार से नए में असाइनमेंट कास्ट जैसा ही होता है।

समय क्षेत्र और समय क्षेत्र साथ टाइमस्टैम्प के बिना टाइमस्टैम्प के बीच के लिए Date/Time types

रूपांतरण मैनुअल के अनुसार सामान्य रूप से लगता है कि समय क्षेत्र के बिना टाइमस्टैम्प मूल्य ले लिया है या के रूप में दी जानी चाहिए टाइमज़ोन स्थानीय समय। AT TIME ZONE का उपयोग कर रूपांतरण के लिए एक अलग समय क्षेत्र निर्दिष्ट किया जा सकता है।

+0

हां। यह व्यवहार समय क्षेत्र के साथ समय क्षेत्र के साथ समय क्षेत्र के बिना समय टिकट से कास्टिंग के समान ही है। यदि आप कुछ अलग करना चाहते हैं तो आप 'ऑल्टर कॉलम कॉलम प्रकार टाइपिंग ' का उपयोग कर सकते हैं और समय क्षेत्र को संभालने के लिए समय फ़ंक्शंस का उपयोग कर सकते हैं। http://www.postgresql.org/docs/current/static/functions-datetime.html –

12

समय क्षेत्र को स्पष्ट रूप से निर्दिष्ट करना बेहतर है। कहें, यदि आपका टाइमस्टैम्प यूटीसी (लेकिन टाइमज़ोन के बिना) में होना चाहिए, तो आपको इस तथ्य से सावधान रहना चाहिए कि क्लाइंट या सर्वर का टाइमज़ोन यहां सबकुछ खराब कर रहा है। इसके बजाय लिखें:

ALTER TABLE a ALTER COLUMN t TYPE TIMESTAMP WITH TIME ZONE USING t AT TIME ZONE 'UTC' 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^