sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo aplica PostgreSQL la restricción ÚNICA / qué tipo de índice usa?

o - crear un índice y no asumir que los valores son únicos

es es seguro asumir que los valores son único, si tiene un índice único definido. Así es como se implementan las restricciones únicas (en este momento, y probablemente también en todas las versiones futuras).

Definición de un UNIQUE la restricción hace efectivamente lo mismo (casi, ver más abajo) como crear un índice único sin especificar el tipo de índice. Y, cito el manual:

Las opciones son btree, hash, gist y gin. El método predeterminado es btree.

Agregar una restricción es solo la forma canónica que no se rompería en versiones futuras donde podría implementarse de manera diferente. Eso es todo.

Y no, una restricción única solo se puede implementar con un btree básico índice en todas las versiones hasta PostgreSQL v14 inclusive. Cito el párrafo "ADD table_constraint_using_index" en el manual aquí:

El índice no puede tener columnas de expresión ni ser un índice parcial. Además, debe ser un índice de árbol b con un orden de clasificación predeterminado.

###Otras diferencias

  • Las restricciones únicas se pueden diferir . Eso no es posible para índices únicos. Echa un vistazo a SET CONSTRAINTS comando y siga los enlaces para obtener más información.
:una **clave externa** no puede hacer referencia a columnas con *solo* un índice único. [El manual:][4]

Una clave externa debe hacer referencia a columnas que son una clave principal o forman una restricción única.

El último bit parece estar desactualizado o un malentendido desde el principio. Ver:

  • Valores NULL para las columnas referencial_constraints.unique_constraint_* en el esquema de información

Relacionado:

  • ¿Es el índice único mejor que la restricción única cuando necesito un índice con una clase de operador?