¿Es posible cambiar el nombre de la restricción en Postgres? Tengo un PK agregado con:
ALTER TABLE contractor_contractor ADD CONSTRAINT commerce_contractor_pkey PRIMARY KEY(id);
Y quiero que se le dé un nombre diferente, para ser coherente con el resto del sistema. ¿Debo eliminar la restricción PK existente y crear una nueva? ¿O hay una forma "suave" de gestionarlo?
¡Gracias!
fuente
pg_catalog
, iterar sobre ellaLOOP
y usar una consulta dinámica para cambiar el nombre.Descubrimos que las claves primarias a menudo se quedan atrás del nombre de la tabla principal. Este script nos ayudó a identificar y solucionar los problemas.
select table_name, constraint_name , 'ALTER TABLE ' || table_name || ' RENAME CONSTRAINT ' || constraint_name || ' TO ' || left(table_name, 58) || '_pkey;' from information_schema.table_constraints tc where constraint_type = 'PRIMARY KEY' and constraint_name <> left(table_name, 58) || '_pkey';
Esto busca todas las tablas donde el nombre de la clave principal ya no es el patrón "predeterminado" (
<tablename>_pkey
) y crea un script de cambio de nombre para cada una.El límite de 58 caracteres en el código anterior es para tener en cuenta el tamaño máximo de los nombres de restricción (63bytes).
Obviamente, compruebe lo que se devuelve antes de ejecutarlo. Espero que sea útil para los demás.
fuente