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

Postgresql के साथ रेल में अतिव्यापी समय को कैसे मान्य करें

आपको PostgreSQL में पहिया को फिर से शुरू करने की आवश्यकता नहीं है, ओवरलैप चेक प्राप्त करने के लिए दो सरल तरीके लागू किए गए हैं:

  1. एसक्यूएल का OVERLAPS ऑपरेटर :

काफी सरल,

where("(start_at, end_at) OVERLAPS (?, ?)", range.first, range.last)

हालांकि यह एक श्रेणी को दूसरे के ठीक बाद में सक्षम बनाता है
(दूसरे शब्दों में, यह प्रारंभ <=समय <अंत की जांच करता है )।

  1. श्रेणी के प्रकार' && (ओवरलैप) ऑपरेटर :

यह सरल भी है, आमतौर पर। लेकिन PostgreSQL में time . के लिए बिल्ट-इन रेंज टाइप नहीं है (हालांकि tsrange . हैं , tstzrange , और daterange अन्य अस्थायी प्रकारों के लिए)।

आपको अपने लिए यह श्रेणी प्रकार बनाने की आवश्यकता है:

CREATE TYPE timerange AS RANGE (subtype = time);

लेकिन इसके बाद, आप इसके साथ ओवरलैपिंग की जांच कर सकते हैं

where("timerange(start_at, end_at) && timerange(?, ?)", range.first, range.last)

श्रेणी प्रकार के लाभ:

  • आप अपने आप को नियंत्रित कर सकते हैं, आप सीमा की सीमाओं को कैसे संभालना चाहते हैं

    एफ.ई.एक्स. आप उपयोग कर सकते हैं timerange(start_at, end_at, '[]') श्रेणियों के प्रारंभ और अंत-बिंदु दोनों को शामिल करने के लिए। डिफ़ॉल्ट रूप से इसमें प्रारंभ शामिल होता है, लेकिन श्रेणियों के अंत-बिंदु को शामिल नहीं करता है।

  • इसे अनुक्रमित किया जा सकता है, f.ex. के साथ

    CREATE INDEX events_times_idx ON events USING GIST (timerange(start_at, end_at));
    
  • बहिष्करण बाधाएं :यह अनिवार्य रूप से वही है, जिसे आप हासिल करना चाहते हैं, लेकिन इसे डीबी स्तर पर लागू किया जाएगा (जैसे, UNIQUE या कोई अन्य बाधा):

    ALTER TABLE events
      ADD CONSTRAINT events_exclude_overlapping
      EXCLUDE USING GIST (timerange(start_at, end_at) WITH &&);
    


  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 पंक्ति मूल्यों की तुलना करने के लिए?

  2. एक plpgsql फ़ंक्शन में IF EXISTS के अंदर पहचानकर्ताओं के लिए चर

  3. PostgreSQL में अद्वितीय कॉलम मान शिफ्ट (अपडेट) करें

  4. Django पोस्टग्रेज ArrayField बनाम एक-से-अनेक संबंध

  5. docker-compose up &&docker-compose build:PostgreSQL के साथ त्रुटि