小编Eri*_*984的帖子

获取函数定义时出现“错误:“array_agg”是聚合函数”

我有以下查询来检索函数定义:

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)

我只需要定义中包含特定文本的函数。

当我运行它时,抛出此错误:

"ERROR:  "array_agg" is an aggregate function"
Run Code Online (Sandbox Code Playgroud)

如果我只运行内部查询,它会按预期返回所有定义。没有错误。

我也尝试过这个 where 子句:

where pg_get_functiondef(pp.oid) like '%userid%'
Run Code Online (Sandbox Code Playgroud)

但也不起作用。怎么做?

postgresql aggregate-functions

7
推荐指数
2
解决办法
1741
查看次数

如何在 postgresql 中获取完整的函数定义脚本?

我正在尝试获取函数的完整定义文本,但是每个人都建议的查询返回没有页眉和页脚部分的函数脚本。

这是我正在使用的:

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)

找了一圈也没找到多少。我怎样才能得到这个结果?

postgresql function

2
推荐指数
2
解决办法
4144
查看次数

标签 统计

postgresql ×2

aggregate-functions ×1

function ×1