दिलचस्प पोस्ट
Angularjs autocomplete $ http से एक असंबंधित इंटरफ़ेस के लिए कास्टिंग करते समय यह क्यों संकलन करता है? Log4j.xml में एपेंडर में डायनामिक फ़ाइल नाम कैसे दें एंड्रॉइड पर एप्लिकेशन इंस्टॉल दिनांक प्राप्त करें एक अमूर्त वर्ग के एक निर्माता हो सकता है? जावा में पाठ के लिए बाइनरी कैसे जावा में बाइट सरणी में छवि कन्वर्ट करने के लिए? XMLHttpRequest फ़ाइल लोड नहीं कर सकता। क्रॉस मूल अनुरोध केवल HTTP के लिए समर्थित हैं कैसे SKSpriteNode को फेंकने के लिए? इनलाइन-ब्लॉक छवि के नीचे अंतरिक्ष से छुटकारा पाएं जेएलएल के साथ / बिना डेल्फी में सीएलआर होस्टिंग – उदाहरण आर सेमीकोलन पंक्तियों में स्तंभ को सीमांकित करता है केपीपीएचपी में 'जॉइन' का अनुक्रम कैसे बदल सकता है? मैं प्रॉक्सी के माध्यम से मेवेन का उपयोग कैसे करूं? UICollectionViewCell पर लंबे समय से प्रेस इशारे

कॉलम के एक सेट पर नल बाधा नहीं

मेरे पास पोस्टग्रेज़ में एक मेज है जिसमें वर्तमान में email कॉलम पर एक NOT NULL बाधा NOT NULL इस तालिका में एक phone कॉलम भी है जो वैकल्पिक है। मैं सिस्टम को email बिना कुछ रिकॉर्ड्स स्वीकार करने के लिए चाहूंगा, लेकिन सिर्फ अगर इन्हें phone NOT NULL दूसरे शब्दों में, मुझे एक NOT NULL डेटाबेस डेटाबेस बाधा की आवश्यकता होती है, जैसे कि email या phone फ़ील्ड दोनों या तो मौजूद हैं या बिना किसी त्रुटि के सफल होने के लिए UPDATE क्वेरी सफल होती हैं।

उपर्युक्त आगे बढ़ाना, क्या डाक के नामों का एक सेट निर्दिष्ट करने के लिए, पोस्टग्रेस में संभव है, जिनमें से एक या अधिक रिकॉर्ड को सफलतापूर्वक अद्यतन या बनाए जाने के लिए NOT NULL होना चाहिए?

Solutions Collecting From Web of "कॉलम के एक सेट पर नल बाधा नहीं"

@ इगार काफी सही है और कुछ OR 'एड अभिव्यक्ति तेज और सरल हैं

स्तंभों की एक लंबी सूची के लिए (उदाहरण में ए, b , c , d , e , f , g ), यह छोटा और तेज ही है:

 CHECK (NOT (a,b,c,d,e,f,g) IS NULL) 

एसक्यूएल फिल्ड डेमो

यह कैसे काम करता है?

उपर्युक्त का एक अधिक क्रियाशील रूप होगा:

 CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL) 

ROW अनावश्यक सिंटैक्स यहाँ है।

IS NULL साथ एक ROW अभिव्यक्ति का परीक्षण केवल TRUE रिपोर्ट करता है, यदि प्रत्येक स्तंभ स्तंभ न हो – जो कि हम को बाहर करना है।

(a,b,c,d,e,f,g) IS NOT NULL साथ इस अभिव्यक्ति को केवल उलट करना संभव (a,b,c,d,e,f,g) IS NOT NULL , क्योंकि यह परीक्षण करेगा कि प्रत्येक एकल स्तंभ IS NOT NULL । इसके बजाय, नोड के साथ संपूर्ण अभिव्यक्ति को नकारना। देखा।

यहां और यहां मैनुअल में अधिक विवरण।

प्रपत्र की एक अभिव्यक्ति:

 CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL) 

एक ही, कम सुन्दर और एक प्रमुख प्रतिबंध के साथ प्राप्त होगा: केवल मिलान प्रकार के डेटा के स्तंभों के लिए काम करता है, जबकि किसी ROW अभिव्यक्ति पर चेक किसी भी कॉलम के साथ काम करता है।

आप इस के लिए CHECK बाधा का उपयोग कर सकते हैं। कुछ इस तरह:

 CHECK (email is not null OR phone is not null) 

बाधाओं का विवरण here मिल सकता here