PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

कैसे लेनदेन_टाइमस्टैम्प () PostgreSQL में काम करता है

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() फ़ंक्शन, जो प्रत्येक कथन के माध्यम से आगे बढ़ने पर भी बदलता है (यदि कथन के भीतर कई बार कहा जाता है)।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में ::क्या करता है?

  2. पोस्टग्रेज़ में, क्या आप टाइमस्टैम्प के लिए डिफ़ॉल्ट स्वरूपण सेट कर सकते हैं, सत्र या विश्व स्तर पर?

  3. आप एक यादृच्छिक स्ट्रिंग कैसे बनाते हैं जो PostgreSQL में सत्र आईडी के लिए उपयुक्त है?

  4. PostgreSQL में किसी तालिका के सूची कॉलम नाम और डेटाटाइप कैसे प्राप्त करें?

  5. PostgreSQL एक कस्टम डेटा प्रकार के साथ एक फ़ंक्शन लौटाता है