sql >> Database >  >> RDS >> PostgreSQL

Wat betekent de uitsluitingsbeperking 'EXCLUDE USING gist (c WITH &&)'?

Terwijl een CHECK constraint evalueert een expressie op basis van een enkele rij van de tabel, een EXCLUDE constraint evalueert een vergelijking van twee rijen in de tabel. Zie het als een algemene UNIQUE beperking:in plaats van "geen twee rijen kunnen gelijk zijn", kun je dingen zeggen als "geen twee rijen overlappen", of zelfs "geen twee rijen kunnen verschillend zijn ".

Om dit te bereiken zonder elke mogelijke combinatie van waarden te controleren, heeft het een geschikte indexstructuur nodig waarmee het mogelijke overtredingen kan vinden wanneer u een rij invoegt of bijwerkt. Dit is wat de gist een deel van de verklaring verwijst naar:een bepaald type index die kan worden gebruikt om andere bewerkingen dan gelijkheid te versnellen.

De rest van de declaratie is de beperking zelf:c is de kolom die wordt getest, en && is de operator die voor geen enkel paar rijen true mag retourneren. In dit geval && is de "overlaps"-operator zoals vermeld op de handleidingpagina voor geometrische operatoren .

Dus samengesteld, de beperking EXCLUDE USING gist (c WITH &&) vertaalt naar "geen twee waarden van c moeten elkaar overlappen (meer precies, A.c && B.c moet false of null retourneren voor alle afzonderlijke rijen A en B ), en gebruik een gist index om deze beperking te controleren".




  1. TemplateSyntaxError:ImportError gevangen tijdens renderen:kan naam utils niet importeren

  2. SUBDATE() vs DATE_SUB() in MySQL:wat is het verschil?

  3. onjuist doden van mysqld - start nu niet

  4. Ruby/PgSQL-fout bij het starten van Rails:kan een dergelijk bestand niet laden -- pg_ext (LoadError)