如何在与我的函数相同的模式中引用表?

时间:2016-10-14 21:14:14

标签: postgresql

我正在模式中创建一个函数,我将从中进行一系列查询。我希望所有这些查询都像在函数的模式首先出现在搜索路径中一样。我知道我可以在函数的上下文中更改搜索路径,但是我无法在函数中找到如何学习函数所包含的模式。

1 个答案:

答案 0 :(得分:1)

您可以尝试解析pg_context的{​​{1}}返回值:

create schema test_schema;

create or replace function test_schema.test_function()
returns text language plpgsql as $$
declare
    stack text;
begin
    get diagnostics stack = pg_context;
    return stack;
end $$;

select test_schema.test_function();

                              test_function                              
-------------------------------------------------------------------------
 PL/pgSQL function test_schema.test_function() line 5 at GET DIAGNOSTICS
(1 row)

如果函数名称是唯一的,您可以获取查询系统目录get diagnostics的模式名称:

create or replace function test_schema.test_function_2()
returns text language sql as $$
    select nspname::text
    from pg_namespace n
    join pg_proc p on n.oid = pronamespace
    where proname = 'test_function_2'
$$;

select test_schema.test_function_2() as schema_name;

 schema_name 
-------------
 test_schema
(1 row)