我有以下查询来检索函数定义:
select pg_get_functiondef
from (
select pp.proname, pl.lanname,pn.nspname, pg_get_functiondef(pp.oid)
from pg_proc pp
inner join pg_namespace pn on (pp.pronamespace = pn.oid)
inner join pg_language pl on (pp.prolang = pl.oid)
where pl.lanname = 'plpgsql' and
pn.nspname = 'pga'
) f
where pg_get_functiondef like '%userid%'
Run Code Online (Sandbox Code Playgroud)
我只需要定义中包含特定文本的函数。
当我运行它时,抛出此错误:
Run Code Online (Sandbox Code Playgroud)"ERROR: "array_agg" is an aggregate function"
如果我只运行内部查询,它会按预期返回所有定义。没有错误。
我也尝试过这个 where 子句:
where pg_get_functiondef(pp.oid) like '%userid%'
Run Code Online (Sandbox Code Playgroud)
但也不起作用。怎么做?
我正在尝试获取函数的完整定义文本,但是每个人都建议的查询返回没有页眉和页脚部分的函数脚本。
这是我正在使用的:
select prosrc from pg_proc where proname='my_func';
Run Code Online (Sandbox Code Playgroud)
这是返回的内容:
DECLARE
some_var1 TEXT;
some_var2 TEXT;
Status character varying;
BEGIN
--SCRIPT CODE HERE
RETURN retval;
END;
Run Code Online (Sandbox Code Playgroud)
但我想要的是这个:
CREATE OR REPLACE FUNCTION my_func(logdate_utc date)
RETURNS character varying
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
DECLARE
some_var1 TEXT;
some_var2 TEXT;
Status character varying;
BEGIN
--SCRIPT CODE HERE
RETURN retval;
END;
$BODY$;
ALTER FUNCTION my_func(date)
OWNER TO some_owner;
Run Code Online (Sandbox Code Playgroud)
找了一圈也没找到多少。我怎样才能得到这个结果?