Vous pouvez ajouter un UNIQUE
contrainte
sur id
avant de déposer la PRIMARY KEY
contrainte. Cela satisfait l'exigence des contraintes FK. Par documentation :
J'insiste sur moi.
De toute évidence, la contrainte FK est liée à la contrainte PK avec laquelle elle a été créée explicitement dans pg_depend
. Vous devez donc supprimer et recréer plus tard toutes les contraintes FK de référence ou gâcher les tables système (ce qui n'est pas conseillé !). Meilleur en une transaction pour garder intacte l'intégrité référentielle :
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. (Avec des requêtes pour afficher les entrées de catalogue fournissant des noms entre autres.)
Détails dans le manuel sur ALTER TABLE
.
Cela n'a de sens qu'en tant qu'état intermédiaire. Si id
reste UNIQUE NOT NULL
, ça pourrait aussi bien être le PK.