sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur upprätthåller PostgreSQL den UNIKA begränsningen / vilken typ av index använder den?

eller - skapa ett index och inte anta att värdena är unika

Det är säkert att anta att värden är unikt, om du har ett unikt index definierat. Det är så unika begränsningar implementeras (för närvarande, och förmodligen i alla framtida versioner också).

Definiera en UNIQUE begränsning gör i praktiken samma sak (nästan, se nedan) som att skapa ett unikt index utan att ange indextypen. Och jag citerar manualen:

Alternativen är btree, hash, gist och gin. Standardmetoden är btree.

Att lägga till en begränsning är bara det kanoniska sättet som inte skulle gå sönder i framtida versioner där det kan genomföras annorlunda. Det är allt.

Och nej, en unik begränsning kan endast implementeras med ett grundläggande bträd index i alla versioner upp till och inklusive PostgreSQL v14. Jag citerar stycket "ADD table_constraint_using_index" i manualen här:

Indexet kan inte ha uttryckskolumner och inte heller vara ett partiellt index. Det måste också vara ett b-trädindex med standard sorteringsordning.

###Andra skillnader

  • Unika begränsningar kan skjutas upp . Det är inte möjligt för unika index. Ta en titt på SET CONSTRAINTS kommando och följ länkarna för mer.
- En **främmande nyckel** kan inte referera till kolumner med *bara* ett unikt index. [Manualen:][4]

En främmande nyckel måste referera till kolumner som antingen är en primärnyckel eller utgör en unik begränsning.

Den sista biten verkar vara föråldrad eller ett missförstånd från början. Se:

  • NULL-värden för referential_constraints.unique_constraint_*-kolumner i informationsschemat

Relaterat:

  • Är unikt index bättre än unikt begränsning när jag behöver ett index med en operatorklass



  1. Hur Access 2019 fungerar och hur du arbetar med det

  2. Hur man uppnår PCI-kompatibilitet för MySQL &MariaDB med ClusterControl - The Replay

  3. Välj topp tre värden i varje grupp

  4. RPAD() Funktion i Oracle