postgresql - तालिका सेट डिफ़ॉल्ट में बूलियन कॉलम जोड़ें


159

क्या डिफ़ॉल्ट मान के साथ किसी तालिका में एक स्तंभ जोड़ने के लिए यह उचित postgresql सिंटैक्स है false

ALTER TABLE users
ADD "priv_user" BIT
ALTER priv_user SET DEFAULT '0'

धन्यवाद!


3
क्या आप एक बिट कॉलम या वास्तविक booleanकॉलम चाहते हैं?
rfusca

जवाबों:


285
ALTER TABLE users
  ADD COLUMN "priv_user" BOOLEAN DEFAULT FALSE;

आप सीधे NULL भी निर्दिष्ट नहीं कर सकते

ALTER TABLE users
  ADD COLUMN "priv_user" BOOLEAN NOT NULL DEFAULT FALSE;

अद्यतन : पोस्टग्रेस्कल 11 से पहले के संस्करणों के लिए निम्नलिखित केवल सच है।

जैसा कि क्रेग ने भरी हुई तालिकाओं पर उल्लेख किया है, इसे चरणों में विभाजित करना अधिक कुशल है:

ALTER TABLE users ADD COLUMN priv_user BOOLEAN;
UPDATE users SET priv_user = 'f';
ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;
ALTER TABLE users ALTER COLUMN priv_user SET DEFAULT FALSE;

28
ध्यान दें कि यदि आपकी तालिका बड़ी है, तो इसमें लंबा समय लग सकता है और पूरे समय के लिए तालिका को लॉक कर सकते हैं। इसे चरणों में विभाजित करना तेज़ है: कॉलम को बिना किसी डिफ़ॉल्ट के साथ जोड़ें ALTER TABLE users ADD COLUMN priv_user BOOLEAN;, फिर UPDATE users SET priv_user = 'f';और अंत में यदि आपको ज़रूरत है ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;
क्रेग रिंगर

चरणों में विभाजित होने वाला दृष्टिकोण डिफ़ॉल्ट मान नहीं जोड़ रहा है। क्या एक अलग चरण में "DEFAULT 'f'" जोड़ना अभी भी तेज है?
चार्ली ब्राउन

1
हां एक अलग चरण में डिफ़ॉल्ट जोड़ना केवल एक मेटा डेटा ऑपरेशन है और इस प्रकार बहुत तेज है।
इलके

यह क्या करता है - 'एक मेटा डेटा ऑपरेशन'? किस अर्थ में और क्यों यह एक बार में मूल्य निर्धारित करने से अलग है? साभार
एंड्री एम। स्टेपानोव

1
वास्तविक नियम यह है कि कीवर्ड और अयोग्य पहचानकर्ता मामले के प्रति संवेदनशील नहीं हैं, इसलिए BOOLEAN को आंतरिक रूप से पोस्टग्रैसेकल बूलियन का उपयोग करने की अनुमति दी जाएगी। मैं बड़े अक्षर और SQL कीवर्ड को अपरकेस में लिखना पसंद करता हूं, मैं अपने सभी पहचानकर्ताओं के लिए लोअरकेस का उपयोग करता हूं।
इलके

17

यदि आप एक वास्तविक बूलियन कॉलम चाहते हैं:

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;

नोट: Postgres के सभी संस्करण एक पंक्ति में परिभाषित होने का समर्थन नहीं करते हैं।
बेंजामिन आर

14

भविष्य के संदर्भ के लिए, यदि आपके पास पहले से ही बूलियन कॉलम है और आप केवल एक डिफ़ॉल्ट कार्य जोड़ना चाहते हैं:

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;

5

यदि आप postgresql का उपयोग कर रहे हैं तो आपको बूलियन के रूप में निचले मामले में कॉलम प्रकार BOOLEAN का उपयोग करना होगा।

अन्य उपयोगकर्ताओं को जोड़ें "priv_user" बूलियन DEFAULT गलत;


4

Psql में कॉलम क्वेरी सिंटैक्स को इस तरह बदलें

Alter table users add column priv_user boolean default false ;

बूलियन मान (सही-गलत) DB ( जैसे tf) मान में सहेजें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.