आप सही रास्ते पर थे। लेकिन बहिष्करण बाधाओं के लिए सिंटैक्स थोड़ा अलग है।
अज्ञात तालिका परिभाषा के आधार पर, आपको एक्सटेंशन इंस्टॉल
करने की आवश्यकता हो सकती है (अतिरिक्त मॉड्यूल) btree_gist
पहला। एक बार प्रति डीबी। यह मेरे उदाहरण के लिए आवश्यक है क्योंकि आवश्यक ऑपरेटर वर्ग integer
. प्रकार के लिए स्थापित नहीं है डिफ़ॉल्ट रूप से:
CREATE EXTENSION btree_gist;
देखें:
- PostgreSQL EXCLUDE उपयोग त्रुटि:डेटा प्रकार पूर्णांक में कोई डिफ़ॉल्ट ऑपरेटर वर्ग नहीं है
- कैसे इस्तेमाल करें ( स्थापित करें) PostgreSQL में dblink?
फिर:
CREATE TABLE registration (
tbl_id integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY
, col_a integer NOT NULL
, col_b integer NOT NULL
, valid_from timestamp
, valid_to timestamp
, CONSTRAINT no_overlap
EXCLUDE USING gist (col_a with =, col_b with =, tsrange(valid_from, valid_to) WITH &&)
);
प्रत्येक कॉलम को उसके संबंधित ऑपरेटर के साथ सूचीबद्ध करने की आवश्यकता है।
और आपको एक श्रेणी प्रकार . चाहिए . आप अलग कॉलम का उल्लेख करते हैं valid_from
और valid_to
. और आप tsrange
. का भी जिक्र करते हैं और valid
विफल आदेश में। यह भ्रमित करने वाला है। दो timestamp
मानते हुए कॉलम, अभिव्यक्ति के साथ एक अभिव्यक्ति सूचकांक tsrange(valid_from, valid_to)
करेंगे।
संबंधित:
- इसे निष्पादित करें PostgreSQL में संचालन क्वेरी के घंटे
- खुलने के घंटों के लिए गैर-ओवरलैप, निरंतर टाइमस्टैम्प रेंज (tstzrange)
- TSTZRANGE को && के साथ जोड़ने पर Postgresql 9.4 क्वेरी उत्तरोत्तर धीमी होती जाती है
- स्टोर करें सप्ताह का दिन और समय?
आमतौर पर, timestamptz
(tstzrange
) को timestamp
. पर चुना जाना चाहिए (tsrange
) देखें:
शायद , एक बेहतर डिज़ाइन आपके registration
. के बीच एक-से-अनेक संबंध होगा एक नई registration_range
. में तालिका और 1-N प्रविष्टियां मेज़। और वर्तमान में मान्य प्रविष्टि (किसी भी समय के लिए) निर्धारित करने के लिए कुछ तर्क। अधिक अज्ञात जानकारी पर निर्भर करता है।