यहां कोई बुलेटप्रूफ समाधान नहीं हैं।
मेरी पहली सलाह:सर्वर के डिफ़ॉल्ट टाइमज़ोन पर कभी भरोसा न करें।
मेरी दूसरी सलाह:timestamp
में से चुनें -timestamptz
डेटा के (प्रमुख) शब्दार्थ के अनुसार।
अधिक विवरण में:PostgresSQL के दो टाइमस्टैम्प वेरिएंट हैं, जिन्हें भ्रमित रूप से TIMESTAMP WITHOUT TIMEZONE (timestamp)
नाम दिया गया है। और TIMESTAMP WITH TIMEZONE (timestamptz)
. दरअसल, न तो एक टाइमज़ोन स्टोर करता है, न ही ऑफ़सेट भी। दोनों डेटाटाइप एक ही चौड़ाई (4 बाइट्स) पर कब्जा कर लेते हैं, और उनका अंतर सूक्ष्म है - और इससे भी बदतर, अगर आप उन्हें पूरी तरह से नहीं समझते हैं और आपका सर्वर टाइमज़ोन बदलता है तो आपको काट सकता है। मेरा विवेक नियम है:
-
TIMESTAMP WITH TIMEZONE (timestamptz)
का उपयोग करें मुख्य रूप से "भौतिक" समय . से संबंधित ईवेंट संग्रहीत करने के लिए , जिसके लिए आप मुख्य रूप से यह पूछने में रुचि रखते हैं कि क्याevent 1
event 2
. से पहले था (समय क्षेत्रों की परवाह किए बिना), या समय अंतराल की गणना ("भौतिक इकाइयों" में, उदाहरण के लिए, सेकंड; "सिविल" इकाइयों में दिन-महीने, आदि के रूप में नहीं)। विशिष्ट उदाहरण रिकॉर्ड निर्माण/संशोधन समय हैं - आमतौर पर "टाइमस्टैम्प" शब्द का अर्थ क्या होता है ". -
TIMESTAMP WITHOUT TIMEZONE (timestamp)
उन ईवेंट को संग्रहीत करने के लिए जिनके लिए प्रासंगिक जानकारी "सिविल टाइम" . है (अर्थात, फ़ील्ड{year-month-day hour-min-sec}
समग्र रूप से), और प्रश्नों में कैलेंडर गणना शामिल है। इस मामले में, आप यहां केवल "स्थानीय समय", यानी कुछ अनिर्दिष्ट (अप्रासंगिक, या निहित, या कहीं और संग्रहीत) समयक्षेत्र के सापेक्ष दिनांक-समय संग्रहीत करेंगे।
दूसरा विकल्प आपको "2013-01-20' के दिन हुई सभी घटनाओं" (प्रत्येक संबंधित क्षेत्र/देश/समय क्षेत्र में) के लिए क्वेरी करना आसान बनाता है - लेकिन "सभी घटनाओं के लिए क्वेरी करना अधिक कठिन बनाता है जो एक संदर्भ घटना से पहले (शारीरिक रूप से)" (जब तक हम नहीं जानते कि वे एक ही समय क्षेत्र में हैं)। आप चुनते हैं।
यदि आपको पूरी चीज़ की आवश्यकता है, न तो पर्याप्त है, तो आपको टाइमज़ोन या ऑफ़सेट को अतिरिक्त फ़ील्ड में संग्रहीत करने की आवश्यकता है। एक अन्य विकल्प, जो कुछ बाइट्स बर्बाद करता है, लेकिन प्रश्नों के लिए अधिक कुशल हो सकता है, दोनों क्षेत्रों को संग्रहीत करना है।
यह भी देखें यह उत्तर ।