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

Alterando uma chave primária para uma chave primária composta


Você pode adicionar um ÚNICO restrição em id antes de soltar a CHAVE PRIMÁRIA restrição. Isso satisfaz o requisito das restrições FK. Por documentação:

Minha ênfase em negrito.

Obviamente, a restrição FK está vinculada à restrição PK com a qual foi criada explicitamente em pg_depend . Portanto, você precisa descartar e depois recriar todas as restrições FK de referência ou mexer nas tabelas do sistema (o que não é aconselhável!). Melhor em uma transação para manter a integridade referencial intacta:
BEGIN;
ALTER TABLE bar DROP CONSTRAINT bar_id_foo_fkey;

ALTER TABLE foo 
    DROP CONSTRAINT foo_pkey
  , ADD CONSTRAINT foo_uni_id UNIQUE (id)
  , ADD PRIMARY KEY (id, id2);

ALTER TABLE bar ADD CONSTRAINT bar_id_foo_fkey
  FOREIGN KEY (id) REFERENCES foo (id);

COMMIT;

SQL Fiddle. (Com consultas para mostrar entradas de catálogo fornecendo nomes entre outras coisas.)

Detalhes no manual em ALTER TABLE .

Isso só faz sentido como estado intermediário. Se id permanece UNIQUE NOT NULL , também pode ser o PK.