Anda dapat menambahkan UNIK
kendala
di id
sebelum Anda menjatuhkan PRIMARY KEY
paksaan. Itu memenuhi persyaratan kendala FK. Per dokumentasi:
Penekanan saya yang berani.
Jelas, batasan FK terikat dengan batasan PK yang dibuat dengan eksplisit di pg_depend
. Jadi, Anda perlu menghapus dan kemudian membuat ulang semua batasan FK referensi atau mengacaukan tabel sistem (yang tidak disarankan!). Terbaik dalam satu transaksi untuk menjaga integritas referensial tetap utuh:
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. (Dengan kueri untuk menampilkan entri katalog yang memberikan nama antara lain.)
Detail dalam manual di ALTER TABLE
.
Ini hanya masuk akal sebagai keadaan perantara. Jika id
tetap UNIQUE NOT NULL
, mungkin juga PK.