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