PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Changer une clé primaire en clé primaire composite

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.