संक्षिप्त उत्तर
"मान" विशेषता काम नहीं करेगी यदि आप स्तंभ निर्माण के समय एक गैर-शून्य बाधा जोड़ रहे हैं (इसका उल्लेख दस्तावेज़ीकरण ) उत्पन्न SQL निष्पादित करने में सक्षम नहीं होगा।
समाधान
प्रश्न में वर्णित समाधान जाने का रास्ता है। परिणामी SQL होगा:
-
कॉलम जोड़ें
ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
-
इसे प्रत्येक पंक्ति के लिए एक गैर-शून्य मान पर सेट करें
UPDATE table SET abstract_trimmed = 'No text';
-
NOT NULL बाधा जोड़ें
ALTER TABLE layer ALTER COLUMN abstract_trimmed SET NOT NULL;
क्यों?
एक कॉलम डिफ़ॉल्ट केवल एक INSERT
. के साथ कॉलम में डाला जाता है . "मान" टैग आपके लिए ऐसा करेगा, लेकिन बाद में कॉलम जोड़ा जाता है। लिक्विबेस NOT NULL
. के साथ एक चरण में कॉलम को जोड़ने का प्रयास करता है जगह में बाधा:
ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL;
... जो संभव नहीं . है जब तालिका में पहले से ही पंक्तियाँ हों। यह पर्याप्त स्मार्ट नहीं है।
वैकल्पिक समाधान
चूंकि PostgreSQL 8.0 (अब तक लगभग हमेशा के लिए) एक विकल्प यह होगा कि नया कॉलम एक गैर-शून्य DEFAULT
के साथ जोड़ा जाए :
ALTER TABLE layer
ADD COLUMN abstract_trimmed varchar(455) NOT NULL DEFAULT 'No text';