当前位置:  开发笔记 > 数据库 > 正文

确定Postgresql中的触发源

如何解决《确定Postgresql中的触发源》经验,为你挑选了0个好方法。

你认为可以确定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),但没有任何结果.

有人可以帮我吗?非常感谢提前

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有