wake-up-neo.com

Was bedeutet die Ausschlussbedingung "EXCLUDE USING Gist (c WITH &&)"?

Aus einem PostgreSQL-Dokument

Ausschlussbeschränkungen stellen sicher, dass, wenn zwei Zeilen mit den angegebenen Operatoren in den angegebenen Spalten oder Ausdrücken verglichen werden, mindestens einer dieser Operatorvergleiche false oder null zurückgibt. Die Syntax lautet:

CREATE TABLE circles (
    c circle,
    EXCLUDE USING Gist (c WITH &&)
);

Ich habe mich gefragt, was EXCLUDE USING Gist (c WITH &&) bedeutet. Insbesondere Gist(), c WITH && Und EXCLUDE USING.

Kann es in check umgeschrieben werden? Vielen Dank.

14
user3284469

Während eine CHECK - Einschränkung einen Ausdruck basierend auf einer einzelnen Zeile der Tabelle auswertet, wertet eine EXCLUDE - Einschränkung einen Vergleich von zwei Zeilen in der Tabelle aus. Stellen Sie es sich wie eine verallgemeinerte UNIQUE -Einschränkung vor: Anstelle von "Keine zwei Zeilen können gleich sein" können Sie sagen, dass sich keine zwei Zeilen überlappen, oder sogar "Keine zwei Zeilen können gleich sein" anders ".

Um dies zu erreichen, ohne jede mögliche Kombination von Werten zu überprüfen, ist eine entsprechende Indexstruktur erforderlich, die es ermöglicht, mögliche Verstöße beim Einfügen oder Aktualisieren einer Zeile zu finden. Dies ist, worauf sich der Gist -Teil der Deklaration bezieht: ein bestimmter Indextyp , der verwendet werden kann, um andere Operationen als 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 true zurückgeben darf. In diesem Fall ist && Der "Überlappungs" -Operator wie auf der Handbuchseite für geometrische Operatoren aufgeführt .

Zusammengefasst bedeutet die Einschränkung EXCLUDE USING Gist (c WITH &&), dass sich keine zwei Werte von c überlappen dürfen (genauer gesagt, A.c && B.c Muss für alle unterschiedlichen Zeilen false oder null zurückgeben A und B), und verwenden Sie bitte einen Gist -Index, um diese Einschränkung zu überwachen ".

18
IMSoP