2012-12-21 7 views
15

मैं तालिका को छोटा करने के बाद गलत सीरियल आईडी प्राप्त करने के लिए अंतिम() का चयन करता हूं।अनुक्रम तालिका को छंटनी के बाद रीसेट नहीं किया जाता है

जब मैं मेज छोटा करना, मैं lastval() का उपयोग करें चुनें, मैं गलत आईडी/मिला

उत्तर

2

आप तो अनुक्रम रीसेट करना चाहते हैं:

setval('sequence_name', 0) 

विद्यमान अनुक्रम नाम मुद्दे को सूचीबद्ध करने के psql प्रॉम्प्ट पर \ds

+0

नोट यह है कि एक क्षेत्र के अनुक्रम के कार्यक्रम संबंधी पहचान के लिए समारोह pg_get_serial_sequence। pg_get_serial_sequence ('tablename', 'colname') का चयन करें; –

+0

गलत आईडी का अर्थ है, यह वास्तविक जनरेटिंग आईडी मान नहीं है। – user1369887

44

प्रयास करें

TRUNCATE TABLE table_name 
RESTART IDENTITY; 

यह होगा

Automatically restart sequences owned by columns of the truncated table(s).

यहाँ विवरण: TRUNCATE

+0

त्रुटि: "रीस्टार्ट" पर या उसके पास वाक्यविन्यास त्रुटि लाइन 1: तालिका उत्पाद को छोटा करें पुन: प्रारंभ करें पहचान; – user1369887

+0

@ user1369887 आपके पास PostgreSQL का कौन सा संस्करण है? –

+0

मेरा सर्वर संस्करण है: सर्वर 8.3.16 – user1369887

9

बाद अनुक्रम पुनर्स्थापित करने के लिए मानक तरीका है:

truncate table table_name restart identity; 

लेकिन कुछ ver में सायन & मंच, यह सिंटेक्स त्रुटि है,

उस मामले में

, आप रीसेट अनुक्रम बिना काट-छांट कर सकते हैं, और एक अन्य एसक्यूएल के साथ अनुक्रम में परिवर्तन, इस प्रयास करें:

truncate table table_name; 
alter sequence seq_name start 1; 
2

अगले

ALTER SEQUENCE sequence_name RESTART WITH 1; 
1
की जाँच करें

नंबर 1 के साथ वापस शुरू करने के लिए अनुक्रम को रीसेट करने का सबसे अच्छा तरीका यह है कि आपने सफलतापूर्वक इसे छोटा कर दिया है:

ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1 

तो, उन तालिका के लिए उदाहरण के लिए यह होगा:

ALTER SEQUENCE users_id_seq RESTART WITH 1 
+1

इस कोड स्निपेट के लिए धन्यवाद, जो कुछ सीमित, तत्काल सहायता प्रदान कर सकता है। एक उचित स्पष्टीकरण [बहुत सुधार होगा] (// meta.stackexchange.com/q/114762) यह दिखाकर इसका दीर्घकालिक मूल्य * क्यों * यह समस्या का एक अच्छा समाधान है, और भविष्य के पाठकों के साथ इसे और अधिक उपयोगी बना देगा अन्य, समान प्रश्न। आपके द्वारा किए गए अनुमानों सहित कुछ स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें। –

+0

वहां आप जाते हैं .... – jahmed31

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