以下查询似乎有效,但我不确定它是否是最佳/始终正确的方法:
select
parameter_name,
CASE WHEN data_type='ARRAY'
THEN SUBSTRING(udt_name, 2)||'[]'
ELSE data_type
END AS data_type
from information_schema.parameters
where specific_schema='my_schema'
and parameter_mode='IN'
and specific_name like 'my_proc_16831'
order by ordinal_position
无论如何,它对我来说看起来有点老套。例如,如果我的参数是数字数组,是否有更好的方法来检索 numeric[] 作为类型?
我想你想要
format_type(typid oid, typmod integer)
。鉴于:
您可以通过以下方式获取过程详细信息:
...尽管这消除了 using 的可移植性
information_schema
,因为您依赖于 Pg 特定行为。它还假定 typmod 始终为 -1,因为 PostgreSQL 不跟踪函数的 typmod - 例如,numeric(18,2)
成为numeric
函数参数。至少这样你不需要使用你的
LIKE
hack,或者依赖于关于数组内部类型名称的可变假设。顺便说一句,您可以直接使用
pg_proc
andpg_type
代替。如果性能至关重要,那么这可能是值得做的,但否则information_schema
将更具跨版本可移植性。这给了你等价物: