【问题标题】:How to determine if a trigger was called via CASCADE?如何确定是否通过 CASCADE 调用了触发器?
【发布时间】:2018-09-24 15:10:57
【问题描述】:

只有当这是一个级联操作时,我才能告诉我的触发器继续执行?有关键字吗?

IF condition THEN
  IF TG_OP = 'DELETE' AND operation_is_a_result_of_cascade_delete THEN
    RETURN OLD;
  ELSE
    -- my constraints go here
  END IF;
END IF;

我想施加某些条件,但前提是DELETE 不是由外键约束的CASCADING 关键字引起的。

【问题讨论】:

    标签: postgresql plpgsql cascading-deletes


    【解决方案1】:

    我不确定我是否理解您的问题,但您可以使用pg_trigger_depth() 来了解您的触发器是否是通过另一个触发器调用的。

    如果结果为 1,则您的触发器被顶级语句调用。

    【讨论】:

    • 我会检查pg_trigger_depth(),谢谢。但是我的问题有什么不清楚的地方?我想改进以使其一目了然。
    • 我对您的问题唯一清楚的部分是“改写”。我不知道什么是“继续交易”。我想这是一个适当的技术术语的问题。我会看看我能做什么。
    • 有效,我忘记接受答案了,对不起!我将其设置为触发触发的条件 - WHEN (pg_trigger_depth() < 1),因此级联删除运行甚至没有触发该功能。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多