既存テーブルにFKを追加しようとしたときにDBに負荷がかかるのを避けたいので、検証なしのFKを張る方法をメモします。
こんな感じで NOT VALID をつけておけばよいです。
ALTER TABLE "SomeTable" ADD CONSTRAINT "SomeTable_fkey" FOREIGN KEY ("someId") REFERENCES "ToTable"("id") ON DELETE RESTRICT ON UPDATE CASCADE NOT VALID;
検証がずっと無効だと困るので、別途検証を有効にします。
ALTER TABLE "SomeTable" VALIDATE CONSTRAINT "SomeTable_fkey";
select
connamespace,
conname,
c.relname as child_table,
p.relname as parent_table,
confdeltype
from
pg_constraint
join pg_class c on c.oid = conrelid
join pg_class p on p.oid = confrelid;
-- Foreign key deletion action code: a = no action, r = restrict, c = cascade, n = set null, d = set default