Допустим, у меня есть функция 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()
... но это не даст вам непосредственный вызывающий объект, а даст вам оператор пользователя верхнего уровня. Я не знаю никакого способа получить немедленный оператор вызова; на самом деле нет стека для изучения. - person Craig Ringer   schedule 27.10.2012