Al crear una tabla en PostgreSQL, se asignarán nombres de restricción predeterminados si no se proporcionan:
CREATE TABLE example (
a integer,
b integer,
UNIQUE (a, b)
);
Pero al usar ALTER TABLEpara agregar una restricción, parece que un nombre es obligatorio:
ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b);
Esto ha causado algunas inconsistencias en los nombres de los proyectos en los que he trabajado y genera las siguientes preguntas:
¿Existe una forma sencilla de agregar una restricción a una tabla existente con el nombre que habría recibido si se hubiera agregado durante la creación de la tabla?
Si no es así, ¿deberían evitarse por completo los nombres predeterminados para evitar inconsistencias?
postgresql
naming-conventions
constraints
Ian Mackinnon
fuente
fuente

Respuestas:
El manual es bastante claro sobre esto (" tableconstraint: este formulario agrega una nueva restricción a una tabla usando la misma sintaxis que CREATE TABLE. ")
Entonces simplemente puedes ejecutar:
fuente
CONSTRAINTgustaALTER TABLE example ADD CONSTRAINT UNIQUE (a, b);y obtenía errores. ¡Gracias!Los nombres estándar para índices en PostgreSQL son:
{tablename}_{columnname(s)}_{suffix}donde el sufijo es uno de los siguientes:
pkeypara una restricción de clave principalkeypara una restricción únicaexclpara una restricción de exclusiónidxpara cualquier otro tipo de índicefkeypara una clave externacheckpara una restricción de comprobaciónEl sufijo estándar para secuencias es
seqpara todas las secuenciasPrueba de su restricción ÚNICA:
fuente
fkeyy que las restricciones de claves externas de varias columnas solo parecen incluir el nombre de la primera columna.CREATE TABLE mytable (mycolumn numeric UNIQUE);