sql >> Database >  >> RDS >> PostgreSQL

Hoe dwingt PostgreSQL de UNIQUE-beperking af / welk type index gebruikt het?

of - maak een index en ga er niet vanuit dat de waarden uniek zijn

Het is is veilig om aan te nemen dat waarden zijn unique, als u een unieke index heeft gedefinieerd. Zo worden unieke beperkingen geïmplementeerd (op dit moment en waarschijnlijk ook in alle toekomstige versies).

Een UNIQUE definiëren beperking doet in feite hetzelfde (zie bijna hieronder) als het creëren van een unieke index zonder het indextype op te geven. En ik citeer de handleiding:

Keuzes zijn btree, hash, gist en gin. De standaardmethode is btree.

Het toevoegen van een beperking is gewoon de canonieke manier die niet zou breken in toekomstige versies waar het zou anders worden uitgevoerd. Dat is alles.

En nee, een unieke beperking kan alleen worden geïmplementeerd met een basis btree index in alle versies tot en met PostgreSQL v14. Ik citeer hier de paragraaf "ADD table_constraint_using_index" in de handleiding:

De index mag geen uitdrukkingskolommen hebben en mag ook geen gedeeltelijke index zijn. Het moet ook een b-tree-index zijn met standaard sorteervolgorde.

###Andere verschillen

  • Unieke beperkingen kunnen uitgesteld worden . Bij unieke indexen is dat niet mogelijk. Bekijk de SET CONSTRAINTS commando en volg de links voor meer.
- Een **vreemde sleutel** kan niet verwijzen naar kolommen met *slechts* een unieke index. [De handleiding:][4]

Een externe sleutel moet verwijzen naar kolommen die ofwel een primaire sleutel zijn, ofwel een unieke beperking vormen.

Het laatste stukje lijkt achterhaald of een misverstand vanaf het begin. Zie:

  • NULL-waarden voor referential_constraints.unique_constraint_* kolommen in informatieschema

Gerelateerd:

  • Is een unieke index beter dan een unieke beperking als ik een index met een operatorklasse nodig heb



  1. Zoek naar een bepaalde string in de Oracle clob-kolom

  2. postgresql - tel (geen null-waarden) van elke kolom in een tabel

  3. Een kloon maken van uw MySQL- of PostgreSQL-databasecluster

  4. NVL2-functie in Oracle