PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

In che modo PostgreSQL applica il vincolo UNIQUE/che tipo di indice utilizza?

oppure - creare un indice e non presumere che i valori siano univoci

è sicuro presumere che i valori sono unico, se è stato definito un indice univoco. È così che vengono implementati i vincoli univoci (al momento, e probabilmente anche in tutte le versioni future).

Definizione di un UNIQUE vincolo fa efficacemente lo stesso (quasi, vedi sotto) come creare un indice univoco senza specificare il tipo di indice. E, cito il manuale:

Le scelte sono btree, hash, gist e gin. Il metodo predefinito è btree.

L'aggiunta di un vincolo è solo il modo canonico che non si interromperebbe nelle versioni future in cui potrebbe essere implementato in modo diverso. Questo è tutto.

E no, un vincolo unico può essere implementato solo con un btree di base index in tutte le versioni fino a PostgreSQL v14 incluso. Cito il paragrafo "AGGIUNGI table_constraint_using_index" nel manuale qui:

L'indice non può avere colonne di espressione né essere un indice parziale. Inoltre, deve essere un indice b-tree con ordinamento predefinito.

###Altre differenze

  • I vincoli univoci possono essere differiti . Ciò non è possibile per gli indici univoci. Dai un'occhiata a SET CONSTRAINTS comando e segui i link per ulteriori informazioni.
- Una **chiave esterna** non può fare riferimento a colonne con *solo* un indice univoco. [Il manuale:][4]

Una chiave esterna deve fare riferimento a colonne che sono una chiave primaria o un vincolo univoco.

L'ultimo pezzo sembra essere obsoleto o un malinteso dall'inizio. Vedi:

  • Valori NULL per le colonne referential_constraints.unique_constraint_* nello schema delle informazioni

Correlati:

  • L'indice univoco è migliore del vincolo univoco quando ho bisogno di un indice con una classe operatore