इसके नियमित कॉलम के अलावा, पोस्टग्रैज टेबल में विभिन्न सिस्टम कॉलम भी उपलब्ध हैं। उनमें से xmin
एक, पंक्ति बनाने के लिए उपयोग किए जाने वाले लेनदेन आईडी को संग्रहीत करता है। इसका डेटा प्रकार xid
, एक चार बाइट पूर्णांक है जो किसी बिंदु पर चारों ओर लपेटता है (अर्थात आवश्यक रूप से अद्वितीय नहीं)। txid_current()
बदले में फ़ंक्शन वर्तमान लेनदेन आईडी को लौटाता है, लेकिन जैसा कि bigint
, क्योंकि यह "एक" युग "काउंटर के साथ बढ़ाया गया है, इसलिए यह स्थापना के जीवन के दौरान चारों ओर नहीं लपेटेगा" ( मैनुअल को उद्धृत करने के लिए )।
यदि लेन-देन रैपराउंड अभी तक नहीं हुआ है, तो दोनों मान मेल खाते हैं:
# CREATE TABLE test (label text);
CREATE TABLE
# INSERT INTO test VALUES ('test') RETURNING txid_current();
txid_current
--------------
674500
(1 row)
INSERT 0 1
# SELECT xmin FROM test;
xmin
--------
674500
(1 row)
लेकिन मुझे आश्चर्य है कि क्या ये दोनों मूल्य हमेशा तुलनीय हैं? जहां तक मैं समझता हूं, txid_current()
लेन-देन आईडी रैपराउंड (अधिकतम 2 ^ 32 लेनदेन) के बाद अद्वितीय मूल्यों को वितरित करना जारी रखेगा और xmin
शून्य से शुरू होगा। इसका मतलब है कि दोनों उस बिंदु पर अलग-अलग मान लौटाने लगते हैं?
और अगर यह सच है, तो क्या xid
कोई txid_current()
परिणाम नियमित रूप से निकालने का एक तरीका है ताकि यह xmin
एक तालिका में प्रविष्टियों से मेल खाए (उदाहरण के txid_current()
लिए पूर्णांक में कास्टिंग )?
संपादित करें : यह स्पष्ट करें कि मुझे इस बात की परवाह है कि लेनदेन आईडी रैपराउंड के बाद क्या होता है, जो कि 2 ^ 32 लेनदेन से बहुत पहले होता है। टिप्पणियों में इस पर ध्यान देने के लिए डैनियल वेरिटा का धन्यवाद।
xmin
जमे हुए होने के साथ सवाल अभी भी खड़ा है कि नए (नियमित) xmin
एक तब निष्पादित की तुलना में कैसे txid_current()
।
VACUUM FREEZE
ओवरराइट कर देगाxmin
। की जाँच करें आपका tuples बंद बर्फ़ीली विषय पर एक सिंहावलोकन के लिए।