0

有没有办法获取任何 PostgreSQL 命令的输入参数及其类型和输出参数及其类型的列表?我主要对选择语句和存储过程调用感兴趣。我不想执行命令来获取信息。我对任何我可以使用的自动化解决方案持开放态度。理想情况下,它将是一个我可以调用的存储过程或一个我可以包装的本机库。我想要每个参数的数据类型信息

使用 Microsoft SQL Server,可以从SQL Server 2012 中的新元数据发现功能中sys.sp_describe_first_result_set所述获取此信息。

4

1 回答 1

2

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 函数PQdescribePreparedPQdescribePortal`来返回类型信息。

于 2015-12-11T05:19:33.913 回答