Możesz dodać nadmiarowy UNIQUE
ograniczenie
na id
zanim upuścisz PRIMARY KEY
ograniczenie. To spełnia wymagania ograniczeń FK. Zgodnie z dokumentacją:
Pogrubiony nacisk na moje.
Oczywiście ograniczenie FK jest powiązane z ograniczeniem PK, z którym zostało utworzone, wyraźnie w pg_depend
. Musisz więc usunąć, a później odtworzyć wszystkie odniesienia FK ograniczenia lub bałagan z tabelami systemowymi (co nie jest zalecane!). Najlepsze w jednej transakcji aby zachować integralność referencyjną w stanie nienaruszonym:
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;
Skrzypce SQL. (Z zapytaniami pokazującymi między innymi wpisy katalogu zawierające nazwy).
Szczegóły w podręczniku ALTER TABLE
.
Ma to sens tylko jako stan pośredni. Jeśli id
pozostaje UNIQUE NOT NULL
, równie dobrze może to być PK.