PostgreSQL函数的深度

PostgreSQL函数的深度,postgresql,depth,stored-functions,Postgresql,Depth,Stored Functions,我如何知道存储过程(在postgresql中称为函数)的深度,该函数调用另外两个递归函数? 是否有可能知道调用该函数的次数。 我之所以想这样做,是因为我想切换到迭代方法,而不是递归方法,这在我的理解中更有效 第一个功能如下: CREATE OR REPLACE FUNCTION public.generategrid(parameters) RETURNS SETOF text AS $BODY$ DECLARE /* input params */ BEGIN e

我如何知道存储过程(在postgresql中称为函数)的深度,该函数调用另外两个递归函数? 是否有可能知道调用该函数的次数。 我之所以想这样做,是因为我想切换到迭代方法,而不是递归方法,这在我的理解中更有效

第一个功能如下:

CREATE OR REPLACE FUNCTION public.generategrid(parameters)
 RETURNS SETOF text AS
$BODY$

DECLARE
      /* input params */

BEGIN
      execute generaterowandcols(parameters)
END;

$BODY$
如上所述,它调用另一个函数

CREATE OR REPLACE FUNCTION public.generaterowandcols(parameters)
$BODY$

DECLARE
      /* input params */

BEGIN
      execute generaterow(parameters)

      execute generaterowandcols(parameters)
END;

$BODY$
前面的函数调用下面的函数

CREATE OR REPLACE FUNCTION public.generaterow(parameters)
$BODY$

DECLARE
      /* input params */

BEGIN
      execute generaterow(parameters)

END;

$BODY$
使用pg_trigger_depth()内置函数。。。 ... 但这是为了触发功能

CREATE OR REPLACE FUNCTION func() RETURNS void AS $$
BEGIN
    IF pg_trigger_depth() <> 1 THEN
        RAISE NOTICE pg_trigger_depth();
    END IF;
END;
$$ LANGUAGE plpgsql;
CREATE或REPLACE FUNCTION func()返回void作为$$
开始
如果pg_触发_深度()1,则
升起通知pg_触发器_深度();
如果结束;
结束;
$$语言plpgsql;

用于获取包含调用堆栈的
PG\u上下文

为什么您认为需要知道这一点?你想用它解决的根本问题是什么?我编辑了我的问题法律语法而不是伪代码会更有用。您似乎有工作功能-我猜是plpgsql?你忘了声明你的Postgres版本。是的,你是对的,plpgsql版本是9.6