सबसे पहले, आपको timestamptz
. का उपयोग करना चाहिए timestamp
. के बजाय जब भी कई बार ज़ोन के साथ काम करना। समस्या से पूरी तरह बचेंगे।
विवरण:
आप कर सकते हैं AT TIME ZONE
का उपयोग करें @NuLo सुझाव
जैसा निर्माण करें , यह हो सकता है यहां तक कि काम भी करते हैं, लेकिन ठीक वैसा नहीं जैसा वर्णित किया गया है।
AT TIME ZONE
timestamp
. प्रकार को रूपांतरित करता है (timestamp without time zone
) से timestamptz
. तक (timestamp with time zone
) और इसके विपरीत। पाठ्य प्रस्तुतिकरण एक timestamptz
. का मान वर्तमान सेटिंग . पर निर्भर करता है उस सत्र में समय क्षेत्र का जिसमें आप कमांड चलाते हैं। ये दो timestamptz
मान 100% समान हैं (समय में एक ही बिंदु को इंगित करें):
'2015-09-02 15:55:00+02'::timestamptz
'2015-09-02 14:55:00+01'::timestamptz
लेकिन टेक्स्ट प्रतिनिधित्व नहीं है . डिस्प्ले अलग-अलग टाइम ज़ोन के लिए है। अगर आप इस स्ट्रिंग को अक्षरशः लेते हैं और इसे timestamp
. पर फीड करते हैं टाइप करें, समय क्षेत्र का हिस्सा बस अनदेखा है और आप भिन्न . के साथ समाप्त होते हैं मूल्य। इसलिए, यदि आप अपना COPY
चलाते हैं आपके मूल timestamp
. के समान समय क्षेत्र सेटिंग वाले सत्र में विवरण मान के लिए हैं, सुझाया गया ऑपरेशन होता है काम करने के लिए।
हालांकि, साफ-सुथरा तरीका सही timestamp
. उत्पन्न करना है AT TIME ZONE
. लागू करने से शुरू होने वाले मान दो बार :
SELECT event AT TIME ZONE 'my_target_tz' AT TIME ZONE 'my_source_tz', ...
FROM logtable
ORDER BY event desc;
'my_target_tz'
"आपका अपना समय क्षेत्र" और 'my_source_tz'
. है उदाहरण में क्लाउड सर्वर का समय क्षेत्र। यह सुनिश्चित करने के लिए कि डीएसटी का सम्मान किया जाता है समय क्षेत्र के नाम . का उपयोग करें , समय क्षेत्र के संक्षिप्त रूप नहीं। दस्तावेज:
संबंधित:
- पोस्टग्रेज में डीएसटी के लिए लेखांकन, अनुसूचित वस्तुओं का चयन करते समय
- समय क्षेत्र के नाम समान गुणों वाले टाइमस्टैम्प पर लागू होने पर भिन्न परिणाम देते हैं
या, और भी बेहतर, timestamptz
. का उपयोग करें हर जगह और यह स्वचालित रूप से सही ढंग से काम करता है।