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,触发器