nebo - vytvořte index a nepředpokládejte, že hodnoty jsou jedinečné
Je lze bezpečně předpokládat, že hodnoty jsou jedinečný, pokud máte definovaný jedinečný index. Tak jsou implementována jedinečná omezení (v současné době a pravděpodobně i ve všech budoucích verzích).
Definování UNIQUE omezení dělá efektivně totéž (téměř, viz níže) jako vytvoření jedinečného indexu bez určení typu indexu. A cituji manuál:
Možnosti jsou btree, hash, gist a gin. Výchozí metoda je btree.
Přidání omezení je pouze kanonický způsob, který by se v budoucích verzích nezlomil tam, kde by mohl implementovat jinak. To je vše.
A ne, jedinečné omezení lze implementovat pouze se základním bstromem index ve všech verzích až po PostgreSQL v14 včetně. Cituji odstavec „ADD table_constraint_using_index“ v manuálu zde:
Index nemůže mít sloupce výrazů ani nemůže být částečným indexem. Také to musí být index b-stromu s výchozím řazením.
###Další rozdíly
- Jedinečná omezení lze odložit . To u jedinečných indexů není možné. Podívejte se na
SET CONSTRAINTSa postupujte podle odkazů.
Cizí klíč musí odkazovat na sloupce, které jsou buď primárním klíčem, nebo tvoří jedinečné omezení.
Poslední kousek se zdá být zastaralý nebo nedorozumění ze strany getgo. Viz:
- Hodnoty NULL pro sloupce reference_constraints.unique_constraint_* v informačním schématu
Související:
- Je jedinečný index lepší než jedinečné omezení, když potřebuji index s třídou operátorů