如何查询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
相关产品推荐
相关产品推荐

