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

गैर-अतिव्यापी समय सीमाओं वाली प्रविष्टियां कैसे सुनिश्चित करें?

आप सही रास्ते पर थे। लेकिन बहिष्करण बाधाओं के लिए सिंटैक्स थोड़ा अलग है।

अज्ञात तालिका परिभाषा के आधार पर, आपको एक्सटेंशन इंस्टॉल करने की आवश्यकता हो सकती है (अतिरिक्त मॉड्यूल) btree_gist पहला। एक बार प्रति डीबी। यह मेरे उदाहरण के लिए आवश्यक है क्योंकि आवश्यक ऑपरेटर वर्ग integer . प्रकार के लिए स्थापित नहीं है डिफ़ॉल्ट रूप से:

CREATE EXTENSION btree_gist;

देखें:

फिर:

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) करेंगे।

संबंधित:

आमतौर पर, timestamptz (tstzrange ) को timestamp . पर चुना जाना चाहिए (tsrange ) देखें:

शायद , एक बेहतर डिज़ाइन आपके registration . के बीच एक-से-अनेक संबंध होगा एक नई registration_range . में तालिका और 1-N प्रविष्टियां मेज़। और वर्तमान में मान्य प्रविष्टि (किसी भी समय के लिए) निर्धारित करने के लिए कुछ तर्क। अधिक अज्ञात जानकारी पर निर्भर करता है।




  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. Postgres psql के लिए टाइमज़ोन कैसे सेट करें?

  3. टेक्स्ट से इंट में कैसे डालें यदि कॉलम में पोस्टग्रेएसक्यूएल में इंट और न्यूल दोनों मान हैं

  4. अद्वितीय कॉलम में शून्य की अनुमति दें

  5. Postgres . में एक डेटाबेस से दूसरे डेटाबेस में एक टेबल कॉपी करें