2012-08-31 14 views
27

मैंने अपनी टेबल को कॉलम (प्रकार: टाइमज़ोन के साथ टाइमस्टैम्प) के साथ बनाया है और इसका डिफ़ॉल्ट मान now() (current_timestamp()) पर सेट किया है।अब() डिफ़ॉल्ट मान सभी समान टाइमस्टैम्प दिखा रहे हैं

मैं एक समारोह में अलग-अलग बयान में आवेषण की एक श्रृंखला चलाता हूं और मैंने देखा कि सभी टाइमस्टैम्प (एमएस) के बराबर हैं, क्या फ़ंक्शन वैल्यू किसी भी तरह से कैश किया गया है और पूरे फ़ंक्शन कॉल या लेनदेन के लिए साझा किया गया है?

+0

'कोई()' (फिर मैनुअल में विवरण देखें) की जरूरत चाहते हैं? आपका मतलब है 'अब() '? और 'current_timestamp' के ऐतिहासिक कारणों से कोई पिछला संश्लेषण नहीं है। –

उत्तर

43

expected and documented व्यवहार है कि:

मैनुअल से:

चूंकि ये फ़ंक्शंस वर्तमान लेनदेन के प्रारंभ समय को वापस कर देते हैं, इसलिए उनके मूल्य लेनदेन के दौरान नहीं बदलते हैं। इसे एक विशेषता माना जाता है: इरादा एक एकल लेनदेन को "वर्तमान" समय की निरंतर धारणा रखने की अनुमति देना है, ताकि एक ही लेनदेन के भीतर कई संशोधन एक ही समय के टिकट को सहन कर सकें।

आप कुछ बदल जाता है कि हर बार जब आप एक बयान चलाने के लिए, आप का उपयोग करने के statement_timestamp() या यहाँ तक कि clock_timestamp()

12

now() या current_timestampSTABLE टाइमस्टैम्प लौटने जब लेनदेन शुरू कर दिया कार्य हैं।

other options PostgreSQL offers में से एक पर विचार करें, विशेष रूप से statement_timestamp() पर।
Per documentation:

statement_timestamp() रिटर्न वर्तमान बयान के शुरू करने का समय (खासतौर पर, ग्राहक से नवीनतम आदेश संदेश की प्राप्ति के समय)

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