这看起来很简单,但我无法找到这个问题的答案.
我想要什么?一个包含行的主表,只要它们不被引用(通过外键)就会自行删除.解决方案可能是也可能不是Postgresql特有的.
怎么样?我解决此问题的方法之一(实际上,到目前为止唯一的方法)涉及以下内容:对于引用此主表的每个表,在行的UPDATE或DELETE上,检查master中引用的行,还有多少其他其他行仍然引用引用的行.如果它下降到零,那么我也删除master中的那一行.
(如果你有更好的主意,我想知道!)
详细地:
我有一个由其他许多人引用的主表
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