As dependências internas entre tabelas e/ou outros objetos nunca são vinculadas ao nome do objeto. Internamente, cada objeto é armazenado em uma tabela de catálogo e o OID (chave primária interna) do objeto é usado para tudo senão.
Assim, uma
CHAVE ESTRANGEIRA
a referência é armazenada nas tabelas do catálogo pg_constraint
(a própria restrição incluindo seu nome) e pg_depend
. Alterar os nomes das tabelas não prejudicará a funcionalidade . O nome da restrição permanece inalterada. Você pode ignorar isso ou renomear a restrição para que não seja enganosa.
No entanto, como você não especificou um nome de restrição no momento da criação, o sistema escolheu um padrão, que é
example2_example1fk_fkey
no seu caso, a menos que o nome tenha sido escolhido. Nenhuma referência à tabela referenciada nome. Mas o nome da coluna provavelmente terá que mudar no seu exemplo também. E isso é usado no nome da restrição. ALTER TABLE example2 RENAME example1fk TO example3fk; -- rename column
No Postgres 9.2 ou posterior, você também pode renomear a restrição (como dequis comentar ):
ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;
Em versões mais antigas, você precisa descartar e recriar a restrição para renomeá-la, melhor em uma única instrução:
ALTER TABLE example2 -- rename constraint
DROP CONSTRAINT example2_example1fk_fkey
, ADD CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;
Detalhes no manual.