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

पोस्टग्रेज़ की बाधा यह सुनिश्चित करती है कि कई का एक कॉलम मौजूद है?

2021-09-17 अपडेट :आज तक, gerardnll एक बेहतर उत्तर (सर्वश्रेष्ठ IMO) प्रदान करता है :

लोगों को सबसे स्वच्छ समाधान खोजने में मदद करने के लिए, मैं आपको gerardnll's answer को अपवोट करने की सलाह देता हूं। ।

(FYI करें, मैं वही व्यक्ति हूं जिसने मूल प्रश्न पूछा था।)

2013 से मेरा मूल उत्तर यह है

"constraint -- one या अन्य कॉलम रिक्त नहीं है" PostgreSQL संदेश बोर्ड :

ALTER TABLE my_table ADD CONSTRAINT my_constraint CHECK (
  (column_1 IS NULL) != (column_2 IS NULL));

(लेकिन उपरोक्त दृष्टिकोण तीन या अधिक स्तंभों के लिए सामान्यीकृत नहीं है।)

यदि आपके पास तीन या अधिक कॉलम हैं, तो आप a_horse_with_no_name द्वारा सचित्र सत्य तालिका दृष्टिकोण का उपयोग कर सकते हैं। . हालांकि, मैं निम्नलिखित को बनाए रखना आसान मानता हूं क्योंकि आपको तार्किक संयोजनों को टाइप करने की आवश्यकता नहीं है:

ALTER TABLE my_table
ADD CONSTRAINT my_constraint CHECK (
  (CASE WHEN column_1 IS NULL THEN 0 ELSE 1 END) +
  (CASE WHEN column_2 IS NULL THEN 0 ELSE 1 END) +
  (CASE WHEN column_3 IS NULL THEN 0 ELSE 1 END) = 1;

इसे संक्षिप्त करने के लिए, एक कस्टम फ़ंक्शन बनाना उपयोगी होगा ताकि CASE WHEN column_k IS NULL THEN 0 ELSE 1 END बॉयलरप्लेट को कुछ इस तरह छोड़कर हटाया जा सकता है:

(non_null_count(column_1) +
non_null_count(column_2) +
non_null_count(column_3)) = 1

यह उतना ही कॉम्पैक्ट हो सकता है जितना पीएसक्यूएल अनुमति देगा (?) उस ने कहा, यदि संभव हो तो मैं इस तरह के सिंटैक्स में जाना पसंद करूंगा:

non_null_count(column_1, column_2, column_3) = 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में एक तिथि में वर्ष जोड़ें

  2. यूपीएसईआरटी परीक्षण कोड में सिंटेक्स त्रुटि

  3. बहुरूपी प्रकार का निर्धारण नहीं कर सका क्योंकि इनपुट का प्रकार अज्ञात है

  4. तालिका डेटा देखने के लिए PostgreSql कमांड

  5. postgresql डालने के दौरान मौजूदा प्राथमिक कुंजी ऑटो वृद्धिशील बनाते हैं