PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como alterar REFERENCES no PostgreSQL?


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.