【问题标题】:PostgreSQL function name as variable similar to TG_NAME?PostgreSQL 函数名称作为类似于 TG_NAME 的变量?
【发布时间】:2018-01-11 17:28:12
【问题描述】:

是否有返回 PostgreSQL 函数 名称的特殊变量,类似于 triggers 的特殊变量 TG_NAME

【问题讨论】:

    标签: postgresql function variables


    【解决方案1】:

    从 9.4 开始,我相信我们有 PG_CONTEXT:

    https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html

    CREATE OR REPLACE FUNCTION inner_func() RETURNS integer AS $$
    DECLARE
      stack text;
    BEGIN
      GET DIAGNOSTICS stack = PG_CONTEXT;
      RAISE NOTICE E'--- Call Stack ---\n%', stack;
      RETURN 1;
    END;
    $$ LANGUAGE plpgsql;
    

    为了解析函数名的上下文,使用substring(stack from 'function (.*?) line'),如 https://stackoverflow.com/a/32016935/5315974

    【讨论】:

    • 好的,这是一个很好的解决方法。当然我可以把它放到一个单独的函数中,返回第二行,也许之前解析出函数名。有时可能在 PostgreSQL 中有一个 FC_NAME 变量。
    • 这是当今唯一的方法(顺便说一句,最近 - 在唯一的解决方案是自己编写 C 函数之前)如果你不相信我 - 相信 Erwin Brandstetter 和 Pavel Stehule(在链接的答案上): ) 第一个是 SO 的巨大权威,另一个甚至是公认的贡献者postgresql.org/community/contributors
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 2012-10-15
    • 2012-05-09
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    相关资源
    最近更新 更多