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

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%'

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

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



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

我也试过这个 where 子句:
where pg_get_functiondef(pp.oid) like '%userid%'

但也不起作用。怎么做?

最佳答案

pg_get_functiondef() 不适用于聚合函数,而 pg_catalog.pg_proc 包含许多聚合函数。您可以使用 pg_proc.proisagg bool 值过滤掉它们,如下所示:

select
    proname as name,
    pronamespace::pg_catalog.regnamespace,
    pg_catalog.pg_get_functiondef(oid)
from pg_catalog.pg_proc
where proisagg is false; -- this filters them out

关于postgresql - "ERROR: "array_agg "is an aggregate function"获取函数定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48709614/

10-13 21:47