PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Modifica di una chiave primaria in una chiave primaria composita

È 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.