नया कॉलम जोड़ते समय डिफ़ॉल्ट मान सेट करें:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');
मौजूदा कॉलम के लिए डिफ़ॉल्ट मान को बदलने से मौजूदा डेटा नहीं बदलता है क्योंकि डेटाबेस के पास यह जानने का कोई तरीका नहीं है कि कौन से मान बदले जाने चाहिए; कॉलम मानों पर कोई "इस कॉलम का डिफ़ॉल्ट मान" ध्वज नहीं है, केवल डिफ़ॉल्ट मान है (मूल रूप से NULL क्योंकि आपने कुछ और निर्दिष्ट नहीं किया है) और वर्तमान मान (NULL भी) लेकिन "NULL" के बीच अंतर बताने का तरीका क्योंकि यह डिफ़ॉल्ट है" और "NULL क्योंकि यह स्पष्ट रूप से NULL पर सेट किया गया था"। इसलिए, जब आप इसे दो चरणों में करते हैं:
- कॉलम जोड़ें।
- डिफ़ॉल्ट मान बदलें।
PostgreSQL आपके द्वारा अभी जोड़े गए कॉलम पर डिफ़ॉल्ट मान लागू नहीं करेगा। हालाँकि, यदि आप कॉलम जोड़ते हैं और एक ही समय में डिफ़ॉल्ट मान की आपूर्ति करते हैं तो PostgreSQL को पता होता है कि किन पंक्तियों में डिफ़ॉल्ट मान (उनमें से सभी) हैं, इसलिए यह कॉलम जोड़े जाने पर मानों की आपूर्ति कर सकता है।
वैसे, आप शायद उस कॉलम पर भी NOT NULL चाहते हैं:
create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');
और, a_horse_with_no_name
के रूप में नोट, यदि आप केवल rid_seq
. का उपयोग करना चाहते हैं आपके test.rid
. के लिए कॉलम तो आप इसके स्वामी कॉलम को सेट करना
करना चाहेंगे करने के लिए test.rid
ताकि अगर कॉलम को हटा दिया जाए तो अनुक्रम गिरा दिया जाएगा:
alter sequence rid_seq owned by test.rid;