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 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