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 TABLE
para 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
CONSTRAINT
gustaALTER 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:
pkey
para una restricción de clave principalkey
para una restricción únicaexcl
para una restricción de exclusiónidx
para cualquier otro tipo de índicefkey
para una clave externacheck
para una restricción de comprobaciónEl sufijo estándar para secuencias es
seq
para todas las secuenciasPrueba de su restricción ÚNICA:
fuente
fkey
y que las restricciones de claves externas de varias columnas solo parecen incluir el nombre de la primera columna.CREATE TABLE mytable (mycolumn numeric UNIQUE);