sql >> Databasteknik >  >> RDS >> PostgreSQL

Vad betyder uteslutningsrestriktionen "EXCLUDE USING Gist (c WITH &&)"?

Medan en CHECK begränsning utvärderar ett uttryck baserat på en enda rad i tabellen, en EXCLUDE constraint utvärderar en jämförelse av två rader i tabellen. Tänk på det som en generaliserad UNIQUE begränsning:istället för "inga två rader kan vara lika", kan du säga saker som "inga två rader överlappar" eller till och med "inga två rader kan vara olika ".

För att uppnå detta utan att kontrollera alla möjliga kombinationer av värden behöver den en lämplig indexstruktur som gör att den kan hitta möjliga överträdelser när du infogar eller uppdaterar en rad. Detta är vad gist är en del av deklarationen hänvisar till:en viss typ av index som kan användas för att påskynda andra operationer än jämlikhet.

Resten av deklarationen är själva begränsningen:c är kolumnen som testas, och && är operatorn som inte får returnera sant för något par av rader. I det här fallet, && är "överlappningsoperatorn" som listad på sidan för geometriska operatorer .

Så sammanställt, begränsningen EXCLUDE USING gist (c WITH &&) översätts till "inga två värden av c måste överlappa varandra (mer exakt, A.c && B.c måste returnera false eller null för alla distinkta rader A och B ), och använd en gist index för att övervaka denna begränsning".




  1. MySQL överordnade barn en fråga urval

  2. Hur man får den sista dagen i månaden i Oracle

  3. mysqldb på python 2.6+ (win32)

  4. Partial Index används inte i ON CONFLICT-satsen när du utför en upsert i Postgresql