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