有没有办法从plpgsql函数中获得函数的名称?甚至是函数的OID?使用plpgsql获取函数内的当前函数的名称
我知道在plpgsql中有一些“特殊的”变量(如FOUND),但似乎没有任何方法可以获取此变量。 (尽管如此,如果你的函数是用C语言编写的,我已经阅读过它的地方。这并不重要,但它会让我做的更好,更脆弱。
我使用PostgreSQL诉9.1.5
有没有办法从plpgsql函数中获得函数的名称?甚至是函数的OID?使用plpgsql获取函数内的当前函数的名称
我知道在plpgsql中有一些“特殊的”变量(如FOUND),但似乎没有任何方法可以获取此变量。 (尽管如此,如果你的函数是用C语言编写的,我已经阅读过它的地方。这并不重要,但它会让我做的更好,更脆弱。
我使用PostgreSQL诉9.1.5
对于触发器使用TG_NAME得到激发触发器(未触发功能)的名称。
您还有current_query()
以获取顶级查询由应用程序执行,这是您的函数执行的根本原因。它不会显示任何中间功能。
否则,不是真的AFAIK,我前一阵子想去打印一个“当前函数堆栈”进行调试。其他人可能知道更多。
UPDATE:在Pg 9.4及以上版本中,您还可以使用PG_CONTEXT
来调用堆栈,但不仅仅是当前的函数名称。
更新:可能采取调用堆栈可以在PostgreSQL的9.4
没有,有没有办法如何让PLPGSQL功能当前执行的函数的名称。
一年前我写了访问调用堆栈的函数 - 它是orafce的一部分。您可以从堆栈
更新:在PostgreSQL 9.4中可以调用堆栈 –
获得最后一个函数在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;
这感觉像这些问题之一,你已经决定在解决实际问题并且您正在寻求该解决方案的帮助。背景是什么?你为什么需要这些信息?你想用它解决什么问题? –
@CraigRinger。你是对的。我真的不想写一篇500字的论文,写一个问题,说明我正在做什么,以及我已经解决的所有解决方案/设计中的所有要求,时间表,设计经验等等。我只是试图回答关于它的一小部分的问题。 –
@DavidS有道理。 '运气。 –