क्या किसी तालिका रिकॉर्ड के लिए किसी प्रकार का इन-ऑर्डर पहचानकर्ता उत्पन्न करने का कोई तरीका है?इन-ऑर्डर अनुक्रम पीढ़ी
मान लीजिए कि हमें दो धागे कर पूछना चाहते हैं:
थ्रेड 1:
begin;
insert into table1(id, value) values (nextval('table1_seq'), 'hello');
commit;
थ्रेड 2:
begin;
insert into table1(id, value) values (nextval('table1_seq'), 'world');
commit;
यह (समय के आधार पर) एक बाहरी पर्यवेक्षक होगा कि पूरी तरह से संभव है देखें (2, 'दुनिया') रिकॉर्ड (1, 'हैलो') से पहले दिखाई देता है।
यह ठीक है, लेकिन मैं 'table1' में सभी रिकॉर्ड्स प्राप्त करने का एक तरीका चाहता हूं जो पिछली बार बाहरी पर्यवेक्षक ने इसे चेक किया था।
तो, क्या उनके द्वारा डाले गए क्रम में रिकॉर्ड प्राप्त करने का कोई तरीका है? शायद ओआईडी मदद कर सकते हैं?
मुझे नहीं लगता कि भौतिक पंक्ति स्थान पर भरोसा करना एक वैध रणनीति है। निरस्त लेनदेन, खो गया डेटाबेस कनेक्शन, आदि सभी बाद में पंक्ति को गलत क्रम में रखा जा सकता है। एक सीरियल कॉलम का उपयोग करना पर्याप्त नहीं है, क्योंकि पंक्ति डालने और थ्रेड 1 लेनदेन करने के बीच कोई देरी हो सकती है, जो थ्रेड 2 लेनदेन को प्रतिबद्ध और उसके सामने देखा जा सकता है। – Tometzky
@Tometzky: मैं मानता हूं कि यह विश्वसनीय नहीं है। मैंने पहले से ही उल्लेख किए जाने से भी अधिक कारणों के लिए। इसमें केवल ऑर्डर टुपल्स के लिए * कुछ * कारण शामिल हैं (जैसे अनुक्रम से अलग-अलग आईडी प्राप्त करना), लेकिन दूसरों को नहीं। –
मैंने सीटीआईडी का दुरुपयोग करने की कोशिश की लेकिन यह काम नहीं किया क्योंकि मैं समय-समय पर कुछ पंक्तियां हटाना चाहता हूं। एक स्वचालित monotonically बढ़ते काउंटर होने के लिए अच्छा होगा, लेकिन मुझे लगता है कि मुझे स्पष्ट लॉकिंग करना होगा। – Cyberax