本篇主要目的是查找模式下函數名稱,其中用到自定義類型轉換的方法,爲了將參數拼接起來
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必須帶上,防止相同函數名,不同參數的函數將參數合併
查詢結果
大功告成!