PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

मौजूदा तालिका में एक गैर-अशक्त स्तंभ जोड़ना विफल रहता है। क्या value विशेषता को अनदेखा किया जा रहा है?

संक्षिप्त उत्तर

"मान" विशेषता काम नहीं करेगी यदि आप स्तंभ निर्माण के समय एक गैर-शून्य बाधा जोड़ रहे हैं (इसका उल्लेख दस्तावेज़ीकरण ) उत्पन्न SQL निष्पादित करने में सक्षम नहीं होगा।

समाधान

प्रश्न में वर्णित समाधान जाने का रास्ता है। परिणामी SQL होगा:

  1. कॉलम जोड़ें

    ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
    
  2. इसे प्रत्येक पंक्ति के लिए एक गैर-शून्य मान पर सेट करें

    UPDATE table SET abstract_trimmed = 'No text';
    
  3. 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';

मैनुअल:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डीपडिव इंस्टॉलेशन, पोस्टग्रेएसक्यूएल त्रुटि

  2. क्या PostgreSQL 12.1 के साथ MacOS कैटालिना पर वर्चुअलएन्व में psycopg2 स्थापित करने में कोई समस्या है?

  3. रेल में pg_attribute तालिका पर धीमी अंतर्निहित क्वेरी को कैसे ठीक करें

  4. PostgreSQL के लिए NGINX TLS समाप्ति

  5. PostreSQL में केवल नई पंक्तियाँ कैसे सम्मिलित करें?