दिलचस्प पोस्ट
मैं एक टुकड़ा के भीतर से एक गतिविधि कैसे शुरू करूं? इनपुट टेक्स्ट बॉक्स में मान प्राप्त करें क्या proguard.cfg पुस्तकालय परियोजनाओं के लिए आवश्यक है? एक अलग बनाएँ तालिका के बिना एक SELECT कथन में एक अस्थायी तालिका बनाएं जेटेबल, रोफिल्टर और रोफिल्टर.इंटर्री कोणीय 2: रूट पथ केस असंवेदनशील बनाओ पथ से फ़ाइल नाम निकालने के लिए कैसे? स्थैतिक चर लिंक त्रुटि एसक्यूएल में, क्या यह दो तालिकाओं के लिए एक दूसरे को संदर्भित करने के लिए ठीक है? Office VBA Editor में कोड के ब्लॉक को टिप्पणी और असंबद्ध कैसे करें कई सेट कॉलम इकट्ठा करें पायथन में कोशिश-छोड़कर-दूसरे का उपयोग करने के लिए क्या यह एक अच्छा अभ्यास है? स्ट्रिंग के पहले एन वर्ण प्राप्त करें सिंगल एप्लीकेशन पर एकाधिक डोमेन को प्रबंधित करने के लिए रेल मार्ग कैसे बताऊँ कि जावा में एक फ़ाइल विलोपन विफल क्यों है?

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

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

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

वेब के समाधान से एकत्रित समाधान "कॉलम के एक सेट पर नल बाधा नहीं"

@ इगार काफी सही है और कुछ 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