2013-02-14 5 views
26

पोस्टग्रेस्क्ल 8.4 में वर्तमान अनुक्रम मान कैसे प्राप्त करना संभव है?वर्तमान को पुनर्प्राप्त करने के विकल्प (चलने वाले प्रश्न के एक पल पर) अनुक्रम मान

नोट: मुझे कुछ प्रकार के आंकड़ों के लिए मूल्य चाहिए, बस पुनर्प्राप्त करें और स्टोर करें। मैन्युअल रूप से वृद्धि के मामले में समेकन और दौड़ की स्थितियों से संबंधित कुछ भी सवाल के लिए प्रासंगिक नहीं है।

नोट 2: अनुक्रम कई तालिकाओं में साझा किया जाने

नोट 3:

  • वापसी मान सबसे हाल ही में मौजूदा सत्र में इस दृश्य के लिए nextval द्वारा प्राप्त: currval की वजह से काम नहीं करेगा
  • ERROR: currval of sequence "<sequence name>" is not yet defined in this session

मेरे वर्तमान विचार: DDL है, जो अजीब है पार्स करने के लिए है

+0

आप अनुक्रम नाम पता है? क्या आपको एक ही समय में अनुक्रम का उपयोग करके कई सत्रों के बारे में चिंता करने की ज़रूरत है? –

+0

@mu बहुत छोटा है: हाँ, अनुक्रम नाम ज्ञात है। और मुझे उस मूल्य की आवश्यकता है जो मेरे कोड चलाने के पल पर वास्तविक है। – zerkms

+0

आप शायद बोहेमियन के अपडेट नोट्स के रूप में ['currval'] (http://www.postgresql.org/docs/current/static/functions-sequence.html) की तलाश में हैं। –

उत्तर

54

आप उपयोग कर सकते हैं:

SELECT last_value FROM sequence_name; 

अद्यतन: इस CREATE SEQUENCE बयान में दर्ज है:

Although you cannot update a sequence directly, you can use a query like:

SELECT * FROM name;

to examine the parameters and current state of a sequence. In particular, the last_value field of the sequence shows the last value allocated by any session. (Of course, this value might be obsolete by the time it's printed, if other sessions are actively doing nextval calls.)

+0

यही है! क्या आप कृपया एक दस्तावेज़ीकरण का संदर्भ भी जोड़ सकते हैं जो बताता है कि हम इस तरह अनुक्रम का उपयोग कर सकते हैं और मैं आपको जांचूंगा। – zerkms

+1

@zerkms: उत्तर दस्तावेज़ के संदर्भ के साथ अद्यतन किया गया। –

+0

कूल, धन्यवाद ... – zerkms

2

अनुक्रम किसी तालिका में अद्वितीय आईडी के लिए इस्तेमाल किया जा रहा है, तो आप बस यह कर सकते हैं:

select max(id) from mytable; 

लिए सबसे कारगर तरीका है, हालांकि विशिष्ट postgres, है:

select currval('mysequence'); 
हालांकि तकनीकी रूप से

यह कॉल द्वारा उत्पन्न किए गए अंतिम मूल्य को nextval('mysequence') पर भेजता है, जो कॉलर द्वारा का उपयोग नहीं किया जा सकता है (और अगर अप्रयुक्त एक ऑटो increments आईडी कॉलम में अंतराल छोड़ देगा)।

+0

'अधिकतम (आईडी) 'अनुक्रम मूल्य के करीब भी होने की गारंटी नहीं देता है। पीएस: यह भी उल्लेख करना भूल गया कि अनुक्रम कई तालिकाओं में साझा किया गया है, उस – zerkms

+0

के लिए खेद है क्यों डाउनवोट? मैंने नक्स() के उपयोग के लिए एक अस्वीकरण डाला। – Bohemian

+0

पीएस: मैंने इसे डाउनवोट नहीं किया (इसे वापस शून्य पर रखने के लिए ऊपर) – zerkms

संबंधित मुद्दे