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.