इस मामले का स्थायी समाधान
समस्या से पूरी तरह बचने के लिए डेटा प्रकार text . का उपयोग करें या varchar / character varying character varying(n) के बजाय लंबाई विनिर्देशक के बिना . इन डेटा प्रकारों के बारे में मैनुअल में पढ़ें।
CREATE TABLE monkey(name text NOT NULL)
यदि आप वास्तव में अधिकतम लंबाई लागू करना चाहते हैं, तो एक CHECK . बनाएं बाधा :
ALTER TABLE monkey
ADD CONSTRAINT monkey_name_len CHECK (length(name) < 101);
आप किसी भी समय दृश्य जैसी वस्तुओं को छुए बिना और प्रकार के परिवर्तन के कारण तालिका में नई पंक्तियों को लिखने के लिए पोस्टग्रेज़ को मजबूर किए बिना उस बाधा को बदल या छोड़ सकते हैं (जो कि पोस्टग्रेज़ के आधुनिक संस्करण में हमेशा आवश्यक नहीं होता है)।पी>
विस्तृत विवरण
जैसा कि @Michael द्वारा प्रस्तावित किया गया है, मैं कुछ और सामान्य जानकारी जोड़ता हूं:
PostgreSQL में एक दृश्य केवल "उपनाम से उपश्रेणी" नहीं है। दृश्यों को एक नियम के साथ विशेष तालिकाओं के रूप में कार्यान्वित किया जाता है ON SELECT TO my_view DO INSTEAD . (इसीलिए आप ALTER TABLE . के साथ विचारों को बदल सकते हैं आदेश।) आप GRANT . कर सकते हैं इसमें विशेषाधिकार, टिप्पणियां जोड़ें या यहां तक कि कॉलम डिफॉल्ट्स को परिभाषित करें (नियम के लिए उपयोगी ON INSERT TO my_view DO INSTEAD... ) यहाँ या यहाँ मैनुअल में और पढ़ें।
यदि आप अंतर्निहित वस्तुओं को बदलते हैं, तो आपको किसी भी निर्भर दृश्य की परिभाषित क्वेरी को भी बदलना होगा। ALTER VIEW कथन केवल एक दृश्य की सहायक विशेषताओं को बदल सकता है। CREATE OR REPLACE VIEW का उपयोग करें क्वेरी बदलने के लिए - यह किसी भी अतिरिक्त विशेषता को सुरक्षित रखेगा।
हालांकि, यदि आप परिणामी स्तंभों के डेटा प्रकार बदलना चाहते हैं (जैसे हाथ में मामले में), CREATE OR REPLACE VIEW संभव नहीं है। आपको DROP करना होगा पुराना और CREATE एक नया दृश्य। यह अंतर्निहित तालिकाओं के किसी भी डेटा को कभी नहीं हटाएगा। यह करेगा हालांकि, दृश्य के किसी भी अतिरिक्त गुण को छोड़ दें, जिसे फिर से बनाना होगा।