You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询PostgreSQL中函数的数组参数维度?

获取PostgreSQL函数数组参数的维度

在PostgreSQL中,使用information_schema.parameters(或直接查询pg_proc)时,确实无法直接区分一维和二维数组参数的维度——正如你提供的示例,两个函数的数组参数在查询结果里data_type均为ARRAY,udt_name都是_text,无法通过这些字段判断维度差异。

解决方案

要获取数组参数的具体维度,可以使用PostgreSQL内置的pg_get_function_arguments函数,它会返回包含维度信息的完整参数定义:

SELECT 
  proname AS function_name,
  unnest(string_to_array(pg_get_function_arguments(oid), ', ')) AS parameter_definition
FROM pg_proc
WHERE proname IN ('one_dim', 'two_dim')
AND pronamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'pg_temp');

执行后返回结果示例:

function_name | parameter_definition
--------------|----------------------
one_dim       | arr text[]
two_dim       | arr text[][]

如果需要更结构化的输出,可结合pg_proc与information_schema.parameters,通过format_type函数解析参数类型的OID和修饰符,精准获取带维度的类型信息:

SELECT
  p.proname AS function_name,
  a.ordinal_position,
  a.parameter_name,
  format_type(t.oid, a.dtd_identifier::int) AS full_data_type
FROM pg_proc p
JOIN pg_namespace ns ON p.pronamespace = ns.oid
JOIN information_schema.parameters a 
  ON a.specific_name = p.proname || '_' || p.oid::text
  AND a.specific_schema = ns.nspname
JOIN pg_type t ON t.typname = a.udt_name
WHERE p.proname IN ('one_dim', 'two_dim')
AND ns.nspname = 'pg_temp';

该查询会清晰返回每个参数的完整类型,明确区分一维/二维数组。

内容的提问来源于stack exchange,提问作者mushishi78

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 04:13:25