你认为可以确定PostgreSQL中触发器执行的来源吗?我们假设我有两个表如下:
CREATE TABLE tbl1 (id bigserial NOT NULL PRIMARY KEY, name text NOT NULL); CREATE TABLE tbl2 (id bigserial NOT NULL PRIMARY KEY, owner bigint NOT NULL REFERENCES tbl1(id) ON DELETE CASCADE, prop text NOT NULL);
其中tbl2使用"ON DELETE CASCADE"引用tbl1.
此外,让我们在tbl2上定义一个触发器,它在删除ROW后执行:
CREATE FUNCTION test_fn() RETURNS trigger AS $$ BEGIN RAISE NOTICE 'test_fn()'; RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE TRIGGER test_delete AFTER DELETE ON tbl2 FOR EACH ROW EXECUTE PROCEDURE test_fn();
在删除tbl2中的ROW之后始终执行触发器,如果直接删除行或通过级联删除行,则独立执行.例如,下面的两个语句最终触发了触发器:
DELETE FROM tbl1 WHERE id = 1; DELETE FROM tbl2 WHERE id = 1;
在test_fn()里面,有可能区分这两种情况吗?即弄清楚为什么行被删除?我试图确定使用堆栈的原因(即使用GET DIAGNOSTICS stack = PG_CONTEXT),但没有任何结果.
有人可以帮我吗?非常感谢提前