2010-01-07 7 views
30

मेरा प्रश्न सरल है।पोस्टग्रेस्क्ल - अल्टर अनुक्रम अभिव्यक्तियों के साथ उपक्विरी का उपयोग

क्या PostgreSQL में अभिव्यक्तियों को बदलने के भीतर subqueries का उपयोग करना संभव है?

मैं प्राथमिक कुंजी कॉलम मान के आधार पर अनुक्रम मान को बदलना चाहता हूं।

मैंने निम्न अभिव्यक्ति का उपयोग करने का प्रयास किया, लेकिन यह निष्पादित नहीं होगा।

बदलने अनुक्रम के साथ पुनः आरंभ public.sequenceX

अग्रिम

उत्तर

55

धन्यवाद मैं तुम्हें ऐसा कर सकते हैं पर विश्वास नहीं है, लेकिन आप (अधिकतम (table_id) +1 मेज से चुनें) सेटवल फ़ंक्शन दिशा का उपयोग करने में सक्षम होना चाहिए जो परिवर्तन करता है।

select setval('sequenceX', (select max(table_id)+1 from table), false) 

झूठी इसे अगले अनुक्रम संख्या को वास्तव में दिया गया है जैसा कि दिया गया है।

+1

वास्तव में क्या मुझे इसकी तलाश थी! बहुत बहुत धन्यवाद! – Danmaxis

+9

'चयन सेवल (' अनुक्रम एक्स ', (तालिका से अधिकतम (table_id) का चयन करें))' अंतिम पैरामीटर, "is_called" के बाद, वही चीज़ पूरा करेगा, सत्य पर डिफ़ॉल्ट है, लेकिन यह भी सही तरीके से संभालता है जहां आपने बनाया हो 1. – chbrown

4

इसके अलावा आप मामले वस्तु नाम मिलाया है और आप इस तरह एक त्रुटि प्राप्त हो रहे हैं:

ERROR: relation "public.mytable_id_seq" does not exist 

... regclass का उपयोग कर निम्न संस्करण उपयोगी होना चाहिए:

select setval('"public"."MyTable_Id_seq"'::regclass, (select MAX("Id") FROM "public"."MyTable")) 
+0

के अलावा मूल्य के साथ एक अनुक्रम के साथ अनुक्रम डबल कोट्स के चारों ओर एकल उद्धरण नोटिस करने के लिए थोड़ा सा लिया! –

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