जवाबों:
( अपडेट किया गया ( टिप्पणी करने वाले लोगों के लिए धन्यवाद )
मान लें कि आपके पास एक तालिका है test1
, जिसका नाम आप एक ऑटो-इंक्रीमेंट, प्राथमिक-कुंजी id
(सरोगेट) कॉलम जोड़ना चाहते हैं । निम्न कमांड PostgreSQL के हाल के संस्करणों में पर्याप्त होना चाहिए:
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
PostgreSQL के पुराने संस्करणों में (8.x से पहले?) आपको सभी गंदे काम करने थे। कमांड के निम्नलिखित अनुक्रम को चाल करना चाहिए:
ALTER TABLE test1 ADD COLUMN id INTEGER;
CREATE SEQUENCE test_id_seq OWNED BY test1.id;
ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval('test_id_seq');
UPDATE test1 SET id = nextval('test_id_seq');
फिर से, Postgres के हाल के संस्करणों में यह ऊपर दिए गए एकल आदेश के लगभग बराबर है।
ADD PRIMARY KEY
एक NOT NULL
बाधा भी बनती है (9.3 पोस्टग्रेट्स में परीक्षण)।
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
यह आप सभी की जरूरत है:
id
कॉलम जोड़ेंश्रेय @resnyanskiy को दिया जाता है जिन्होंने एक टिप्पणी में यह जवाब दिया था।
ALTER TABLE <table> DROP CONSTRAINT <pkey_name>;
V10 में एक पहचान कॉलम का उपयोग करने के लिए,
ALTER TABLE test
ADD COLUMN id { int | bigint | smallint}
GENERATED { BY DEFAULT | ALWAYS } AS IDENTITY PRIMARY KEY;
पहचान कॉलम की व्याख्या के लिए, https://blog.2ndquadrant.com/postgresql-10-identity-columns/ देखें ।
डीफ़ॉल्ट और जेनरेट किए गए ALWAYS द्वारा जेनरेट किए गए अंतर के लिए, https://www.cybertec-postgresql.com/en/fterences-gains-and-pitashes/ देखें ।
अनुक्रम को बदलने के लिए, https://popsql.io/learn-sql/postgresql/how-to-alter-fterence-in-postgresql/ देखें ।
SQL Error [23502]: ERROR: column "id" contains null values
मैं यहां इसलिए उतरा क्योंकि मुझे भी कुछ ऐसा ही लग रहा था। मेरे मामले में, मैं एक तालिका में कई स्तंभों के साथ स्टैगिंग तालिकाओं के सेट से डेटा को कॉपी कर रहा था, जबकि लक्ष्य तालिका में पंक्ति आईडी भी निर्दिष्ट कर रहा था। यहाँ उपर्युक्त दृष्टिकोणों का एक प्रकार है जो मैंने उपयोग किया था। मैंने अपने लक्ष्य तालिका के अंत में सीरियल कॉलम जोड़ा। इस तरह मुझे डालने के बयान में इसके लिए एक प्लेसहोल्डर नहीं होना चाहिए। तब लक्ष्य तालिका ऑटो में एक सरल चयन * इस कॉलम को आबाद करता है। यहाँ दो एसक्यूएल स्टेटमेंट हैं जो मैंने पोस्टग्रेक्यूएल 9.6.4 पर उपयोग किए थे।
ALTER TABLE target ADD COLUMN some_column SERIAL;
INSERT INTO target SELECT * from source;