सबसे पहले, आपको 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 . का उपयोग करें हर जगह और यह स्वचालित रूप से सही ढंग से काम करता है।