Старый вопрос и уже есть принятый ответ. Но это не ясно объясняет, как это сделать. Поэтому я подумал добавить более четкий ответ.
Предположим, что вы передали имя функции обратного вызова своей основной функции в качестве значения varchar.
CREATE OR REPLACE FUNCTION public.get_function_fields(fn_name character varying)
...
...
Теперь, если вы хотите вызвать эту fn_name
функцию внутри запроса, вам нужно использовать команду EXECUTE
и правильно привести имя вашей функции, используя regproc
, как показано ниже.
EXECUTE 'create temp table if not exists temp_call as select * from ' || fn_name::regproc || '() limit 1';
Важной частью является следующее: ...|| fn_name::regproc || '()..
. Как видите, вы должны добавить круглые скобки и привести имя функции с помощью ::regproc
.
Надеюсь, это кому-нибудь поможет!