इसके नियमित कॉलम के अलावा, पोस्टग्रैज टेबल में विभिन्न सिस्टम कॉलम भी उपलब्ध हैं। उनमें से 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 बंद बर्फ़ीली विषय पर एक सिंहावलोकन के लिए।