Du kan tilføje en redundant UNIQUE
begrænsning
på id
før du slipper PRIMARY KEY
begrænsning. Det opfylder FK-kravet. Pr. dokumentation:
Fed fremhævelse mine.
Det er klart, at FK-begrænsningen er bundet til den PK-begrænsning, den blev oprettet med eksplicit i pg_depend
. Så du skal droppe og senere genskabe alle refererende FK-begrænsninger eller rode med systemtabeller (hvilket ikke er tilrådeligt!). Bedst i én transaktion at holde referenceintegriteten intakt:
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. (Med forespørgsler om at vise katalogindgange, der blandt andet giver navne.)
Detaljer i manualen på ALTER TABLE
.
Dette giver kun mening som mellemtilstand. Hvis id
forbliver UNIQUE NOT NULL
, det kan lige så godt være PK.