冗長な一意
制約
id
に PRIMARY KEY
をドロップする前に 制約。これは、FK制約の要件を満たしています。 ドキュメントごと:
大胆な強調鉱山。
明らかに、FK制約は、 pg_depend
。したがって、参照しているすべてのFK制約を削除して後で再作成するか、システムテーブルを混乱させる必要があります(これはお勧めできません!)。 1回のトランザクションで最高 参照整合性を維持するには:
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フィドル。 (特に名前を提供するカタログエントリを表示するクエリを使用します。)
これは中間状態としてのみ意味があります。 id
の場合 UNIQUE NOT NULL
のままです 、PKの場合もあります。