Můžete přidat redundantní UNIQUE
omezení
na id
než zahodíte PRIMARY KEY
omezení. To splňuje požadavek omezení FK. Podle dokumentace:
Tučné zdůraznění moje.
Je zřejmé, že omezení FK je vázáno na omezení PK, se kterým bylo vytvořeno explicitně v pg_depend
. Takže musíte zrušit a později znovu vytvořit všechna odkazující omezení FK nebo si pohrát se systémovými tabulkami (což není vhodné!). Nejlepší v jedné transakci zachovat referenční integritu nedotčenou:
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. (S dotazy na zobrazení katalogových položek poskytujících mimo jiné jména.)
Podrobnosti v příručce na ALTER TABLE
.
To má smysl pouze jako přechodný stav. Pokud id
zůstane UNIQUE NOT NULL
, může to být také PK.