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

PosgreSQL txid_current () मान की व्याख्या कैसे करें

समझने के लिए मुख्य बिंदु:

  • सब कुछ लेन-देन में है। अगर आप BEGIN . के साथ स्पष्ट रूप से एक नहीं बनाते हैं और COMMIT (या ROLLBACK ) एक आपके लिए केवल उस कथन के लिए बनाया गया है।

  • केवल पढ़ने के लिए SELECT पूर्ण लेन-देन आईडी नहीं मिलता है, उन्हें केवल एक आभासी लेनदेन आईडी मिलती है। तो भले ही यह एक लेन-देन है, SELECT 1; या जो कुछ भी लेन-देन आईडी काउंटर में वृद्धि नहीं करता है।

  • कॉलिंग txid_current() बल लेन-देन आईडी का आवंटन यदि कोई पहले से आवंटित नहीं किया गया था। इसलिए केवल-पढ़ने वाले लेन-देन में अब एक लेन-देन आईडी होगी, जहां पहले यह नहीं होता था।

बेशक, सभी सत्रों में txid भी आवंटित किए जाते हैं। यदि डेटाबेस व्यस्त है तो व्यवहार में आपके ऊपर दिए गए उदाहरण में a+1 और a+429 का txid हो सकता है।

आवेदन स्तर पर किसी भी चीज़ के लिए लेन-देन आईडी का उपयोग करना आम तौर पर बुद्धिमानी नहीं है। विशेष रूप से:

xmin Treat का इलाज करें और xmax आंतरिक सिस्टम स्तर फ़ील्ड के रूप में, और txid_current() . के परिणाम को मानें एक अर्थहीन संख्यात्मक मान के रूप में।

xids के सही और गलत उपयोग पर विवरण

विशेष रूप से आपको कभी नहीं करना चाहिए:

  • xids की संख्यात्मक मान से तुलना करें ताकि उनके क्रम के बारे में किसी प्रकार का निष्कर्ष निकाला जा सके;
  • लेन-देन आईडी जोड़ें या घटाएं;
  • लेन-देन आईडी क्रमित करें;
  • इन्क्रीमेंट या डिक्रीमेंट ट्रांजैक्शन आईडी
  • 32-बिट xid की तुलना करें 64-बिट bigint . के साथ टाइप किया गया फ़ील्ड युग-विस्तारित xid, समानता के लिए भी।

तो एक अनुप्रयोग परिप्रेक्ष्य से xids न तो मोनोटोनिक और न ही क्रमिक हैं।

आप कर सकते हैं सुरक्षित रूप से:

  • समानता या असमानता के लिए दो 64-बिट युग-विस्तारित xids की तुलना करें; और
  • xids पास करें txid_status(...) और अन्य कार्यों को xid लेने के रूप में प्रलेखित किया गया है

सावधान रहें:PostgreSQL 32-बिट संकीर्ण xids का उपयोग करता है जैसे xid प्रकार, और 64-बिट युग-विस्तारित xids को आमतौर पर bigint . के रूप में दर्शाया जाता है जैसे txid_current() . द्वारा लौटाए गए . समानता के लिए इनकी तुलना करना आम तौर पर एक नए डेटाबेस इंस्टाल पर काम करता प्रतीत होगा, लेकिन एक बार पहला युग रैपराउंड हो जाने के बाद और वे अब बराबर नहीं होंगे। पीजी आपको एसक्यूएल स्तर पर एक्सआईडी युग देखने का एक आसान तरीका भी नहीं देता है; आपको यह करना होगा:

select (txid_current() >> 32) AS xid_epoch;

txid_current() द्वारा रिपोर्ट किए गए युग-विस्तारित xid के ऊपरी 32 बिट्स प्राप्त करने के लिए ।

इसलिए ... आप जो भी करने की कोशिश कर रहे हैं, हो सकता है कि ट्रांजेक्शन आईडी इसे करने का सही तरीका न हो।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Google Datastudio के साथ Heroku Postgresql

  2. Psycopg2, Postgresql, Python:थोक-सम्मिलित करने का सबसे तेज़ तरीका

  3. PostgreSQL में एक महीने में दिनों की संख्या प्राप्त करें

  4. OmniDB के साथ PostgreSQL 12 के प्रदर्शन की निगरानी कैसे करें - भाग 1

  5. पोस्टग्रेस्क्ल में महीने और साल के अनुसार समूह क्वेरी परिणाम