pg_trigger_depth()

返回触发器嵌套级别的函数

pg_trigger_depth() 是一个返回当前触发器嵌套级别的系统函数。

pg_trigger_depth()PostgreSQL 9.2 中添加。

用法

pg_trigger_depth () → integer

变更历史

示例

演示 pg_trigger_depth() 的人为示例

postgres=# CREATE TABLE foo (id INT, val TEXT);
CREATE TABLE

postgres=# CREATE OR REPLACE FUNCTION trigger_depth()
             RETURNS TRIGGER
             LANGUAGE plpgsql
           AS $$
             DECLARE
               depth INT;
             BEGIN
               depth := pg_trigger_depth();
               RAISE NOTICE 'depth: %', depth;
               IF depth = 1 THEN
                  INSERT INTO foo VALUES(-1, 'test');
               END IF;
               RETURN NEW;
             END;
           $$;
CREATE FUNCTION

postgres=# CREATE TRIGGER foo_ins_trigger
             BEFORE INSERT
             ON foo
             FOR EACH ROW
             EXECUTE FUNCTION trigger_depth(); -- PostgreSQL 10 and earlier: EXECUTE PROCEDURE trigger_depth();
CREATE TRIGGER

postgres=# INSERT INTO foo values(1,'foo');
NOTICE:  depth: 1
NOTICE:  depth: 2
INSERT 0 1

如果在触发器外部执行,pg_trigger_depth() 返回 0

postgres=# SELECT pg_trigger_depth();
 pg_trigger_depth
------------------
                0
(1 row)

分类

系统函数触发器

另请参阅

pg_trigger,触发器

反馈

提交任何关于 "pg_trigger_depth()" 的评论、建议或更正 在此