有没有办法获取任何 PostgreSQL 命令的输入参数及其类型和输出参数及其类型的列表?我主要对选择语句和存储过程调用感兴趣。我不想执行命令来获取信息。我对任何我可以使用的自动化解决方案持开放态度。理想情况下,它将是一个我可以调用的存储过程或一个我可以包装的本机库。我想要每个参数的数据类型信息。
使用 Microsoft SQL Server,可以从SQL Server 2012 中的新元数据发现功能中sys.sp_describe_first_result_set
所述获取此信息。
有没有办法获取任何 PostgreSQL 命令的输入参数及其类型和输出参数及其类型的列表?我主要对选择语句和存储过程调用感兴趣。我不想执行命令来获取信息。我对任何我可以使用的自动化解决方案持开放态度。理想情况下,它将是一个我可以调用的存储过程或一个我可以包装的本机库。我想要每个参数的数据类型信息。
使用 Microsoft SQL Server,可以从SQL Server 2012 中的新元数据发现功能中sys.sp_describe_first_result_set
所述获取此信息。
PostgreSQL 没有过程(不是 T-SQL 意义上的)——函数结果类型是静态声明的——你只需要查看 table pg_proc
。以下查询显示nanvl
功能信息。
SELECT n.nspname as "Schema",
p.proname as "Name",
pg_catalog.pg_get_function_result(p.oid) as "Result data type",
pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types",
CASE
WHEN p.proisagg THEN 'agg'
WHEN p.proiswindow THEN 'window'
WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger'
ELSE 'normal'
END as "Type"
FROM pg_catalog.pg_proc p
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE p.proname ~ '^(nanvl)$'
AND pg_catalog.pg_function_is_visible(p.oid)
ORDER BY 1, 2, 4;
功能列表 ┌────────┬───────┬──────────────────┬───────────── ────────────────────────┬────────┐ │ Schema │ Name │ 结果数据类型 │ Argument 数据类型 │ Type │ ╞════════╪═══════╪══════════════════╪═════════════ ════════════════════════╪════════╡ │ public │ nanvl │ 双精度 │ 双精度,字符变化 │ 普通 │ │ public │ nanvl │ 双精度 │ 双精度,双精度 │ 普通 │ │ public │ nanvl │ numeric │ numeric, character 可变 │ normal │ │ public │ nanvl │ numeric │ numeric, numeric │ normal │ │ 公共 │ nanvl │ 真实 │ 真实,性格多变 │ 正常 │ │ public │ nanvl │ 真实 │ 真实,真实 │ 正常 │ └────────┴───────┴──────────────────┴────────────── ────────────────────────┴────────┘ (6 行)
获取查询结果有点困难(但它是完全通用的) - 您必须创建准备好的语句或游标,然后您可以使用 API 函数PQdescribePrepared
或PQdescribePortal`来返回类型信息。