PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Was bedeutet die Ausschlussbedingung „EXCLUDE USING gist (c WITH &&)“?

Wohingegen ein CHECK Constraint wertet einen Ausdruck basierend auf einer einzelnen Zeile der Tabelle aus, ein EXCLUDE Constraint wertet einen Vergleich von zwei Zeilen in der Tabelle aus. Stellen Sie es sich wie einen verallgemeinerten UNIQUE vor Einschränkung:Anstelle von „keine zwei Zeilen können gleich sein“ können Sie Dinge sagen wie „keine zwei Zeilen überlappen sich“ oder sogar „keine zwei Zeilen können verschieden sein ".

Um dies zu erreichen, ohne jede mögliche Kombination von Werten zu prüfen, benötigt es eine geeignete Indexstruktur, die es ermöglicht, mögliche Verletzungen zu finden, wenn Sie eine Zeile einfügen oder aktualisieren. Das ist der gist Ein Teil der Deklaration bezieht sich auf:eine bestimmte Art von Index die verwendet werden kann, um andere Operationen als die Gleichheit zu beschleunigen.

Der Rest der Deklaration ist die Einschränkung selbst:c ist die zu testende Spalte und && ist der Operator, der für kein Zeilenpaar wahr zurückgeben darf. In diesem Fall && ist der "overlaps"-Operator wie auf der Handbuchseite für geometrische Operatoren aufgeführt .

Zusammengefasst also die Einschränkung EXCLUDE USING gist (c WITH &&) übersetzt zu "keine zwei Werte von c müssen sich überlappen (genauer gesagt A.c && B.c muss für alle eindeutigen Zeilen A false oder null zurückgeben und B ), und verwenden Sie bitte einen gist Index, um diese Einschränkung zu überwachen".