É possível alterar o nome da restrição no Postgres? Eu tenho um PK adicionado com:
ALTER TABLE contractor_contractor ADD CONSTRAINT commerce_contractor_pkey PRIMARY KEY(id);
E eu quero ter um nome diferente para ele, para ser consistente com o resto do sistema. Devo excluir a restrição de PK existente e criar uma nova? Ou existe uma maneira 'suave' de gerenciar isso?
Obrigado!
fonte
pg_catalog
, iterar sobre elaLOOP
e usar uma consulta dinâmica para renomear.Descobrimos que as chaves primárias geralmente ficam atrás do nome da tabela principal. Este script nos ajudou a identificar e corrigir aqueles com 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';
Isso encontra todas as tabelas onde o nome da chave primária não é mais o padrão "padrão" (
<tablename>_pkey
) e cria um script de renomeação para cada uma.O limite de 58 caracteres acima no código acima deve levar em conta o tamanho máximo dos nomes de restrição (63 bytes).
Obviamente, verifique o que é retornado antes de executá-lo. Espero que isso seja útil para outros.
fonte