sql >> Base de Datos >  >> RDS >> PostgreSQL

Cambiar una clave primaria a una clave primaria compuesta

Puede agregar un ÚNICO restricción en id antes de soltar la CLAVE PRINCIPAL restricción. Eso satisface el requisito de las restricciones FK. Por documentación:

Énfasis en negrita mío.

Obviamente, la restricción FK está vinculada a la restricción PK con la que se creó explícitamente en pg_depend . Por lo tanto, debe descartar y luego recrear todas las restricciones FK de referencia o meterse con las tablas del sistema (¡lo cual no es recomendable!). Mejor en una transacción para mantener intacta la integridad referencial:

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. (Con consultas para mostrar entradas de catálogo que proporcionen nombres, entre otras cosas).

Detalles en el manual en ALTER TABLE .

Esto solo tiene sentido como estado intermedio. Si id permanece ÚNICO NO NULO , bien podría ser el PK.