これはとても単純なようですが、私はこの質問に対する答えを見つけることができませんでした。
私が欲しいものは?(外部キーを介して)参照されなくなったときに自分自身を削除する行を持つマスターテーブル。ソリューションはPostgreSqlに固有である場合とそうでない場合があります。
どのように?UPDATE
この問題を解決するための私のアプローチの1つ(実際には、これまでのところ唯一のアプローチ)には、次のものが含まれます。行上または行上でこのマスターテーブルを参照するすべてのテーブルについて、マスター内DELETE
の参照される行をチェックするために、他の行の数参照されている行を引き続き参照します。ゼロに下がった場合は、マスターのその行も削除します。
(もっと良いアイデアがあれば教えてください!)
詳細: 他の多くの人から参照されている1つのマスターテーブルがあります
CREATE TABLE master (
id serial primary key,
name text unique not null
);
他のすべてのテーブルは、通常、同じ形式です。
CREATE TABLE other (
...
master_id integer references master (id)
...
);
これらのいずれかがではない場合NULL
、それらはの行を参照しmaster
ます。これに移動して削除しようとすると、すでに参照されているため、エラーメッセージが表示されます。
ERROR: update or delete on table "master" violates foreign key constraint "other_master_id_fkey" on table "other"
DETAIL: Key (id)=(1) is still referenced from table "other".
Time: 42.972 ms
を参照するテーブルがたくさんある場合でも、これを理解するのにそれほど時間はかからないことに注意してくださいmaster
。エラーを発生させずにこの情報を見つけるにはどうすればよいですか?