我列出了PostgreSQL模式的所有函数,并且需要函数的每个参数的人类可读类型.表示为数组的类型的OID proallargtypes.我可以删除数组并应用format_type()它,这会导致查询分成多个行,用于单个函数.为了避免这种情况,我必须再次为argtypes 创建一个外部SELECT,GROUP因为,显然,无法对unnested数组进行分组.所有列都依赖于proname,但我必须列出GROUP BY子句中的所有列,这是不必要的,但是proname 不是主键.
有没有更好的方法来实现我的输出目标:
proname | ... | protypes
-------------------------------------
test | ... | {integer,integer}
Run Code Online (Sandbox Code Playgroud)
我目前正在使用此查询:
SELECT
proname,
prosrc,
pronargs,
proargmodes,
array_agg(proargtypes), -- see here
proallargtypes,
proargnames,
prodefaults,
prorettype,
lanname
FROM (
SELECT
p.proname,
p.prosrc,
p.pronargs,
p.proargmodes,
format_type(unnest(p.proallargtypes), NULL) AS proargtypes, -- and here
p.proallargtypes,
p.proargnames,
pg_get_expr(p.proargdefaults, 0) AS prodefaults,
format_type(p.prorettype, NULL) AS prorettype,
l.lanname
FROM pg_catalog.pg_proc p
JOIN pg_catalog.pg_language l
ON l.oid = p.prolang
JOIN pg_catalog.pg_namespace n …Run Code Online (Sandbox Code Playgroud)