pg_trigger_depth() 是一个返回当前触发器嵌套级别的系统函数。
pg_trigger_depth() 在 PostgreSQL 9.2 中添加。
示例
演示 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)
参考资料
- PostgreSQL 文档: 会话信息函数
另请参阅
pg_trigger, 触发器
