版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。要做一枚好奇宝宝,不断学习才不会被时代淘汰! https://blog.csdn.net/sinat_35630008/article/details/84580969
本篇主要目的是查找模式下函数名称,其中用到自定义类型转换的方法,为了将参数拼接起来
pg_pro表存储函数信息,其中proargtypes字段表示输入参数类型。这个字段是oidvector类型的,查了好多资料也没找到这是个啥类型,怎么和pg_type.oid做关联。于是还是自定义类型转换吧!
---- 类型转换
CREATE OR REPLACE FUNCTION oidvector2text(i oidvector) RETURNS text AS $$
BEGIN
RETURN i;
END;
$$ LANGUAGE plpgsql;
然后查询anrpt模式下所有者是gpadmin的函数
select aa.proname||'('||string_agg(coalesce(dd.typname,' '),',')||')' --如果没有参数,则给个空格占位
from (select aa.oid,bb.nspname||'.'||aa.proname proname,regexp_split_to_table(oidvector2text(aa.proargtypes),' ') v_type
from pg_proc aa,pg_namespace bb,pg_authid cc
where aa.pronamespace = bb.oid and aa.proowner = cc.oid
and bb.nspname = 'anrpt'
and cc.rolname = 'gpadmin'
) aa
left join pg_type dd -- 数据类型表
on aa.v_type = dd.oid
group by proname,aa.oid ;-- pg_proc表oid必须带上,防止相同函数名,不同参数的函数将参数合并
查询结果
大功告成!