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 CONSTRAINTS
a 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ů