2012-09-25 9 views
18

में कनवर्ट करने के लिए कैसे करें मेरे पास एक तालिका है जिसमें प्राथमिक कुंजी कॉलम "ग्रिड" है और इसका प्रकार "इंटीजर नॉट" है। मैं इसे "सीरियल नॉट" में परिवर्तित करना चाहता हूं ताकि मैं इस तालिका में कुछ मान डाल सकूं। मैं निम्न कमांड का इस्तेमाल किया यह धारावाहिक में परिवर्तित करने के:पूर्णांक को सीरियल

CREATE SEQUENCE test_table_gid_seq 
     INCREMENT 1 
     MINVALUE 1 
     MAXVALUE 2147483648 START 1 
     CACHE 1; 

ALTER TABLE test_table ALTER COLUMN gid 
     SET DEFAULT nextval('test_table_gid_seq'::regclass); 

यह आदेश धारावाहिक को पूर्णांक में बदल दिया। लेकिन जब मैंने त्रुटि के बाद तालिका में कुछ डेटा दर्ज किया:

त्रुटि: डुप्लिकेट कुंजी मान अद्वितीय बाधा "pk_test" का उल्लंघन करता है।

कृपया इसे हल करने में मेरी सहायता करें। सीरियल में पूर्णांक बदलने के लिए कोई और तरीका है?

+0

जोड़ना [के संभावित डुप्लिकेट 'सीरियल पोस्टग्रेज़ में मौजूदा कॉलम के लिए] (http://stackoverflow.com/questions/9490014/adding-serial-to-existing-column-in-postgres) – kryger

उत्तर

25

gid स्तंभ (max_gid) की अधिकतम मूल्य का चयन करें:

SELECT max(gid) FROM test_table; 

और (शायद, max_gid +1) दृश्य के लिए प्रारंभ बिंदु के रूप में उपयोग:

ALTER SEQUENCE test_table_gid_seq RESTART WITH max_gid; 
+0

अभी भी आसान रैपर नहीं है? – jangorecki

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