PostgreSQL में, transaction_timestamp()
फ़ंक्शन वर्तमान लेनदेन की शुरुआत में वर्तमान दिनांक और समय (समय क्षेत्र ऑफ़सेट सहित) देता है।
यह पारंपरिक पोस्टग्रेज फंक्शन now()
. के बराबर है ।
यह भी current_timestamp
. के समान है फ़ंक्शन (जब बिना किसी तर्क के कहा जाता है), सिवाय इसके कि इसका नाम स्पष्ट रूप से प्रतिबिंबित करने के लिए है कि यह क्या करता है।
transaction_timestamp()
फ़ंक्शन किसी भी पैरामीटर को स्वीकार नहीं करता है, इसलिए आप इसकी सटीकता निर्दिष्ट नहीं कर सकते, जबकि current_timestamp
सटीक पैरामीटर के साथ या बिना कॉल किया जा सकता है।
साथ ही, transaction_timestamp()
एक गैर-एसक्यूएल-मानक फ़ंक्शन है।
सिंटैक्स
वाक्य रचना इस प्रकार है:
transaction_timestamp()
किसी तर्क की आवश्यकता नहीं है या स्वीकार नहीं है।
मूल उदाहरण
प्रदर्शित करने के लिए यहां एक बुनियादी उदाहरण दिया गया है।
SELECT transaction_timestamp();
परिणाम:
2020-07-02 08:23:08.810484+10
लेन-देन के भीतर
लेन-देन में यह कैसे काम करता है, यह दिखाने के लिए यहां एक उदाहरण दिया गया है।
BEGIN;
SELECT transaction_timestamp();
SELECT pg_sleep(5);
SELECT transaction_timestamp();
SELECT pg_sleep(5);
SELECT transaction_timestamp();
COMMIT;
यहाँ psql का उपयोग करते समय मेरे टर्मिनल के भीतर पूरा आउटपुट दिया गया है:
postgres=# BEGIN; BEGIN postgres=# SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2020-07-02 08:27:04.229266+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2020-07-02 08:27:04.229266+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2020-07-02 08:27:04.229266+10 (1 row) postgres=# COMMIT; COMMIT
सभी तीन समय मान समान हैं, भले ही pg_sleep()
फ़ंक्शन का उपयोग प्रत्येक कॉल के बीच transaction_timestamp()
. के निष्पादन में देरी करने के लिए किया गया था , जिनमें से प्रत्येक अपने स्वयं के SQL कथन में हुआ।
इसलिए हम देख सकते हैं कि प्रत्येक कथन के लिए दिया गया समय वर्तमान लेनदेन के प्रारंभ समय पर आधारित है - विवरण पर नहीं। लेन-देन की प्रगति के रूप में यह नहीं बदलता है।
यह एकल लेन-देन को "वर्तमान" समय की एक सुसंगत धारणा रखने की अनुमति देता है, ताकि एक ही लेन-देन के भीतर कई संशोधनों में एक ही समय की मुहर लगे।
एक स्टेटमेंट में कई कॉल
कथन के आगे बढ़ने पर यह भी नहीं बदलता है।
\x
SELECT
transaction_timestamp(),
pg_sleep(5),
transaction_timestamp(),
pg_sleep(5),
transaction_timestamp();
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
transaction_timestamp | 2020-07-02 09:15:56.154175+10 pg_sleep | transaction_timestamp | 2020-07-02 09:15:56.154175+10 pg_sleep | transaction_timestamp | 2020-07-02 09:15:56.154175+10
फिर से, सभी तीन समय मान समान हैं, भले ही pg_sleep()
फ़ंक्शन का उपयोग प्रत्येक कॉल के बीच transaction_timestamp()
. के निष्पादन में देरी करने के लिए किया गया था ।
यह statement_timestamp()
. के विपरीत है , जो करता है प्रत्येक कथन के साथ बदलें, और साथ ही clock_timestamp()
फ़ंक्शन, जो प्रत्येक कथन के माध्यम से आगे बढ़ने पर भी बदलता है (यदि कथन के भीतर कई बार कहा जाता है)।