假设我们有一个像这样的PostgreSQL表:
CREATE TABLE master (
id INT PRIMARY KEY,
...
);
Run Code Online (Sandbox Code Playgroud)
以及使用外键引用它的许多其他表:
CREATE TABLE other (
id INT PRIMARY KEY,
id_master INT NOT NULL,
...
CONSTRAINT other_id_master_fkey FOREIGN KEY (id_master)
REFERENCES master (id) ON DELETE RESTRICT
);
Run Code Online (Sandbox Code Playgroud)
有没有办法检查(从触发器功能内)主行是否可删除而不实际尝试删除它?显而易见的方法是逐个对所有引用表执行SELECT,但我想知道是否有更简单的方法.
我需要这个的原因是我有一个包含分层数据的表,其中任何行都可以有子行,并且只有层次结构中最低的子行可以被其他表引用.因此,当一行即将成为父行时,我需要检查它是否已在任何地方引用.如果是,则它不能成为父行,并且拒绝插入新的子行.