在plpgsql函数中是否有可以获取函数名称?甚至是功能的OID?
我知道plpgsql中有一些“特殊”变量(例如FOUND),但似乎没有办法解决这个问题。 (虽然,如果您的函数是用C语言编写的,我已经读过了。)这并不重要,但它会使我做得更好/更不脆弱。
我正在使用PostgreSQL v.9.1.5
答案 0 :(得分:8)
从Postgres 9.4开始,下面的函数将返回自己的名称:
CREATE OR REPLACE FUNCTION your_schema.get_curr_fx_name()
RETURNS text AS $$
DECLARE
stack text; fcesig text;
BEGIN
GET DIAGNOSTICS stack = PG_CONTEXT;
fcesig := substring(stack from 'function (.*?) line');
RETURN fcesig::regprocedure::text;
END;
$$ LANGUAGE plpgsql;
答案 1 :(得分:5)
更新:PostgreSQL 9.4中提供了调用堆栈的可能性
不,如何在plpgsql函数中获取当前执行函数的名称。
一年前,我编写了访问调用堆栈的函数 - 它是orafce的一部分。你可以从堆栈中获取最后一个函数
答案 2 :(得分:4)
对于触发器,使用TG_NAME来获取触发器(而不是触发器函数)的名称。
您还有current_query()
来获取应用程序执行的顶级查询,这是您执行函数的根本原因。它不会向您显示任何中间功能。
否则,不是真正的AFAIK而且我之前想要打印“当前功能堆栈”进行调试时确实去寻找它。其他人可能知道更多。
UPDATE :在第9.4及以上版本中,您还可以使用PG_CONTEXT
来调用堆栈,但不仅仅是当前的函数名称。