【发布时间】:2012-10-17 00:49:19
【问题描述】:
假设我有一个函数show_files(IN file text, IN suffix text, OUT statement text)。在下一步中调用该函数:
SELECT * FROM show_files(file := 'example', suffix := '.png');
我的问题是:是否有任何解决方案可以让我从该函数内部获得调用该函数的语句?
我的意思是,在运行SELECT 后,函数(OUT statement text) 的输出应该是:'SELECT * FROM show_files(file := 'example', suffix := '.png');',或者是否可以将此语句分配给函数内部的变量?
我需要像TG_NAME、TG_OP等在触发过程中的功能。
也许可以从 SELECT current_query FROM pg_stat_activity 中检索此语句?
当我尝试在函数中使用它时,我得到了一个空记录:
CREATE OR REPLACE FUNCTION f_snitch(text)
RETURNS text AS
$BODY$
declare
rr text;
BEGIN
RAISE NOTICE '.. from f_snitch.';
-- do stuff
SELECT current_query into rr FROM pg_stat_activity
WHERE current_query ilike 'f_snitch';
RETURN rr;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
欢迎任何帮助和建议!
【问题讨论】:
-
您可以使用
SELECT current_query()获得顶级 查询...但这不会给您直接调用者,它会为您提供顶级用户语句。我不知道有什么方法可以获得立即调用声明;没有真正要检查的“堆栈”。 -
谢谢,但是 current_query() 给了我结果:'CREATE OR REPLACE FUNCTION f_snitch(text)' 我想要:'SELECT f_snitch('foo')';
标签: postgresql stored-procedures plpgsql postgresql-9.1