डिफ़ॉल्ट मान सेट करें जब आप नया कॉलम जोड़ें:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');
वर्तमान कॉलम के लिए डिफ़ॉल्ट मान बदलकर मौजूदा डेटा परिवर्तित नहीं होता क्योंकि डेटाबेस जानने का कोई तरीका है जो मूल्यों को बदला जाना चाहिए है ; कॉलम मानों पर "इस कॉलम का डिफ़ॉल्ट मान" ध्वज नहीं है, वहां केवल डिफ़ॉल्ट मान है (मूल रूप से NULL क्योंकि आपने कुछ और निर्दिष्ट नहीं किया है) और वर्तमान मान (भी NULL) लेकिन "NULL" के बीच अंतर बताने का तरीका क्योंकि यह डिफ़ॉल्ट "और" पूर्ण है क्योंकि यह स्पष्ट रूप से पूर्ण पर सेट किया गया था "। तो, जब आप इसे दो चरणों में करते हैं:
- कॉलम जोड़ें।
- डिफ़ॉल्ट मान बदलें।
PostgreSQL आपके द्वारा अभी जोड़े गए कॉलम पर डिफ़ॉल्ट मान लागू नहीं करेगा। हालांकि, यदि आप कॉलम जोड़ते हैं और एक ही समय में डिफ़ॉल्ट मान की आपूर्ति करते हैं तो PostgreSQL जानता है कि कौन सी पंक्तियों में डिफ़ॉल्ट मान है (उनमें से सभी) ताकि यह मानों को आपूर्ति कर सके क्योंकि कॉलम जोड़ा गया है।
वैसे, आप शायद चाहते हैं कि स्तंभ भी पर एक शून्य नहीं:
create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');
और, a_horse_with_no_name के रूप में नोट, यदि आप केवल अपने test.rid
स्तंभ के लिए rid_seq
उपयोग करना चाहते हैं तो आप set its owner column को करना चाह सकते हैं test.rid
ताकि अनुक्रम यदि स्तंभ निकाल दिया जाता है हटा दिया जाएगा:
alter sequence rid_seq owned by test.rid;
स्रोत
2012-02-26 22:57:30
स्निपेट के लिए धन्यवाद। जब मैं इसे चलाने का प्रयास करता हूं तो मैं सिंटैक्स त्रुटियों में भाग रहा हूं: '' या उसके पास @ '। मैं Postgreqsl में चर परिभाषा से परिचित नहीं हूं इसलिए मुझे यकीन नहीं है कि क्या कुछ स्पष्ट है जिसे मुझे बदलने की जरूरत है। – djq
(1) यह SQL सर्वर या संभवतः MySQL वाक्यविन्यास जैसा दिखता है, यह PostgreSQL में काम नहीं करेगा। (2) जैसे ही नई पंक्तियां जोड़ दी जाती हैं, वैसे ही इससे कुछ परेशानी होती है क्योंकि आप अनुक्रम से मूल्यों का उपयोग नहीं कर रहे हैं, अनुक्रम से बाहर आने वाला अगला मान 1 होगा, भले ही आपने पहले से ही ' rid'। –
अच्छा पकड़, [एमयू बहुत छोटा है] (http://stackoverflow.com/users/479863/mu-is-too-short), अनुक्रम मानों का उपयोग न करने के बारे में। और हाँ, मैं एमएस एसक्यूएल सर्वर कोड लिखने में बहुत अच्छा हूं (जिसके साथ मैंने इसे थोड़ा अलग तरीके से निपटाया होगा) और पोस्टग्रेएसक्यूएल से बिल्कुल परिचित नहीं हूं।जिस बिंदु को मैं करने का प्रयास कर रहा था वह एक बाधा को परिभाषित करने और इसे लागू करने के बीच अंतर था, जो ऊपर उल्लिखित उत्तर I से बेहतर समझाता है। –