Du kan lägga till en redundant UNIQUE
begränsning
på id
innan du släpper PRIMARY KEY
begränsning. Det uppfyller kravet på FK-begränsningar. Per dokumentation:
Djärv betoning min.
Uppenbarligen är FK-begränsningen bunden till PK-begränsningen den skapades med uttryckligen i pg_depend
. Så du måste släppa och senare återskapa alla refererande FK-begränsningar eller bråka med systemtabeller (vilket inte är tillrådligt!). Bäst i en transaktion för att hålla referensintegriteten 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-fiol. (Med frågor för att visa katalogposter med bland annat namn.)
Detaljer i manualen på ALTER TABLE
.
Detta är bara vettigt som mellantillstånd. Om id
förblir UNIQUE NOT NULL
, det kan lika gärna vara PK.