lub - utwórz indeks i nie zakładaj, że wartości są unikalne
To jest można bezpiecznie założyć, że wartości są unikalny, jeśli masz zdefiniowany unikalny indeks. W ten sposób implementowane są unikalne ograniczenia (w chwili obecnej i prawdopodobnie również we wszystkich przyszłych wersjach).
Definiowanie UNIQUE
ograniczenie robi skutecznie to samo (prawie, patrz poniżej) jako tworzenie unikalnego indeksu bez określania typu indeksu. I cytuję instrukcję:
Do wyboru są btree, hash, gist i gin. Domyślną metodą jest btree.
Dodanie ograniczenia to tylko kanoniczny sposób, który nie zawiedzie w przyszłych wersjach, w których może być realizowane inaczej. To wszystko.
I nie, unikalne ograniczenie można zaimplementować tylko z podstawowym btree indeks we wszystkich wersjach do PostgreSQL v14 włącznie. Cytuję akapit „ADD table_constraint_using_index” w instrukcji tutaj:
Indeks nie może zawierać kolumn wyrażeń ani być indeksem częściowym. Ponadto musi to być indeks b-drzewa z domyślnym porządkiem sortowania.
###Inne różnice
- Unikalne ograniczenia można odroczyć . Nie jest to możliwe w przypadku unikalnych indeksów. Spójrz na
SET CONSTRAINTS
polecenie i podążaj za linkami, aby uzyskać więcej.
Klucz obcy musi odwoływać się do kolumn, które są albo kluczem podstawowym, albo tworzą unikatowe ograniczenie.
Ostatni fragment wydaje się przestarzały lub nieporozumienie od samego początku. Zobacz:
- Wartości NULL dla kolumn referential_constraints.unique_constraint_* w schemacie informacyjnym
Powiązane:
- Czy unikalny indeks jest lepszy niż unikalne ograniczenie, gdy potrzebuję indeksu z klasą operatora