PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ändern eines Primärschlüssels in einen zusammengesetzten Primärschlüssel

Sie können einen redundanten <-Code hinzufügen>EINZIGARTIG Einschränkung auf id bevor Sie den PRIMARY KEY fallen lassen Zwang. Das erfüllt die Anforderung von FK-Einschränkungen. Pro Dokumentation:

Fettdruck von mir.

Offensichtlich ist die FK-Einschränkung an die PK-Einschränkung gebunden, mit der sie explizit in pg_depend . Sie müssen also alle referenzierenden FK-Einschränkungen löschen und später neu erstellen oder mit Systemtabellen herumspielen (was nicht ratsam ist!). Am besten in einer Transaktion um die referentielle Integrität intakt zu halten:

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. (Mit Abfragen zum Anzeigen von Katalogeinträgen, die ua Namen enthalten.)

Details im Handbuch zu ALTER TABLE .

Dies ist nur als Zwischenzustand sinnvoll. Wenn id bleibt UNIQUE NOT NULL , es könnte genauso gut die PK sein.