Heim > Datenbank > MySQL-Tutorial > Wie kann die EXCLUDE-Einschränkung von PostgreSQL Überlappungen und benachbarte Datums-/Zeitbereiche verhindern?

Wie kann die EXCLUDE-Einschränkung von PostgreSQL Überlappungen und benachbarte Datums-/Zeitbereiche verhindern?

Susan Sarandon
Freigeben: 2025-01-05 09:28:38
Original
259 Leute haben es durchsucht

How Can PostgreSQL's EXCLUDE Constraint Prevent Overlapping and Adjacent Date/Time Ranges?

Verhindern von Duplikaten mit EXCLUDE-Einschränkungen in PostgreSQL

Beim Erstellen einer Datenbank, die beliebige Datums-/Zeitbereiche speichert, ist es wichtig, Einschränkungen durchzusetzen, die überlappende oder benachbarte Einträge verhindern. Diese Einschränkungen sind entscheidend für die Aufrechterhaltung der Datenintegrität und -genauigkeit.

In PostgreSQL dient die EXCLUDE-Einschränkung diesem Zweck durch die Verwendung eines GiST-Index. Es bestehen jedoch häufig Bedenken hinsichtlich der Annahme einer Auflösung von einer Sekunde bei der Definition dieser Einschränkungen. Zeitstempel-Datentypen in PostgreSQL haben oft eine höhere Auflösung, was möglicherweise zu Ungenauigkeiten führt.

Lösung mit exklusiven Grenzen

Um dieses Problem zu beheben und sowohl überlappende als auch benachbarte Bereiche zu verhindern, ist es Es wird empfohlen, exklusive Grenzen ('[)') für Datums-/Zeitbereiche zu erzwingen. Dies beinhaltet das Einschließen der Untergrenze (mithilfe von „lower_inc()“) und das Ausschließen der Obergrenze („NOT Upper_inc()“) durch eine CHECK-Einschränkung. Um benachbarte Bereiche auszuschließen, kann außerdem eine weitere EXCLUDE-Einschränkung mit dem Operator „-|-“ verwendet werden.

Beispielcode:

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))
);
Nach dem Login kopieren

Diese Lösung stellt dies sicher Es sind nur Bereiche mit exklusiven Grenzen zulässig, wodurch sowohl überlappende als auch benachbarte Einträge effektiv verhindert werden. Es stellt außerdem die Datenintegrität sicher, indem es das gewünschte Bereichsverhalten erzwingt.

Das obige ist der detaillierte Inhalt vonWie kann die EXCLUDE-Einschränkung von PostgreSQL Überlappungen und benachbarte Datums-/Zeitbereiche verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage