【gp数据库】查找模式下所有函数名称(附带参数信息)

版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。要做一枚好奇宝宝,不断学习才不会被时代淘汰! 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必须带上,防止相同函数名,不同参数的函数将参数合并

查询结果

大功告成! 

上一篇:【gp数据库】查询函数中引用数据表信息

猜你喜欢

转载自blog.csdn.net/sinat_35630008/article/details/84580969