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

PostgreSQL में EXCLUDE के साथ आसन्न/अतिव्यापी प्रविष्टियों को रोकना

श्रेणी प्रकारों में निचली और ऊपरी सीमा होती है, जिसे शामिल या बाहर किया जा सकता है। विशिष्ट उपयोग मामला (और श्रेणी प्रकारों के लिए डिफ़ॉल्ट) शामिल है निचला और बहिष्कृत करें ऊपरी सीमा।

ओवरलैपिंग . को छोड़कर सीमा स्पष्ट प्रतीत होती है। मैनुअल में एक अच्छा कोड उदाहरण है

इसके अलावा, एक और बहिष्करण बाधा उत्पन्न करें जो आसन्न ऑपरेटर को नियोजित करता है -|- आसन्न . को भी बाहर करने के लिए प्रविष्टियाँ। दोनों GiST . पर आधारित होने चाहिए GIN के रूप में अनुक्रमणिका वर्तमान में इसके लिए समर्थित नहीं है।

इसे साफ रखने के लिए, मैं [) enforce को लागू करूंगा CHECK . के साथ सभी प्रविष्टियों के लिए सीमा (निचले और ऊपरी को छोड़कर) रेंज फ़ंक्शंस का उपयोग करने में बाधा:

CREATE TABLE tbl (
   tbl_id serial PRIMARY KEY
 , tsr tsrange
 , CONSTRAINT tsr_no_overlap  EXCLUDE USING gist (tsr WITH &&)
 , CONSTRAINT tsr_no_adjacent EXCLUDE USING gist (tsr WITH -|-)
 , CONSTRAINT tsr_enforce_bounds CHECK (lower_inc(tsr) AND NOT upper_inc(tsr))
);

db<>यहां बेला करें
(Old SQL Fiddle)

<उप>दुर्भाग्य से, यह दो बनाता है दोनों बहिष्करण बाधाओं को लागू करने के लिए समान जीआईएसटी इंडेक्स, जहां एक तार्किक रूप से पर्याप्त होगा। ऐसा लगता है कि यह वर्तमान कार्यान्वयन (कम से कम 11 पोस्टग्रेज तक) की कमी है।



  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. पोस्टग्रेज:वैक्यूम कमांड मृत टुपल्स को साफ नहीं करता है

  3. PostgreSQL में EXCEPT क्लॉज का उपयोग करना

  4. मैं मैक ओएस एक्स 10.8.2 पर पोस्टग्रेस्क्ल 9.2 डिफ़ॉल्ट उपयोगकर्ता (आमतौर पर 'पोस्टग्रेज') पासवर्ड कैसे रीसेट करूं?

  5. इकाई ढांचा PostgreSQL