È possibile aggiungere un UNIQUE
vincolo
su id
prima di rilasciare la PRIMARY KEY
vincolo. Ciò soddisfa il requisito dei vincoli FK. Per documentazione:
Enfasi in grassetto la mia.
Ovviamente, il vincolo FK è legato al vincolo PK con cui è stato creato esplicitamente in pg_depend
. Quindi è necessario eliminare e ricreare in seguito tutti i vincoli FK di riferimento o pasticciare con le tabelle di sistema (cosa non consigliabile!). Il migliore in una transazione per mantenere intatta l'integrità referenziale:
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 query per mostrare voci di catalogo che forniscono nomi, tra le altre cose.)
Dettagli nel manuale su ALTER TABLE
.
Questo ha senso solo come stato intermedio. Se id
rimane UNIQUE NOT NULL
, potrebbe anche essere il PK.