获取PostgreSQL命令输入和输出类型

时间:2015-12-11 04:18:59

标签: postgresql database-metadata

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

使用Microsoft SQL Server,可以sys.sp_describe_first_result_set中的svn ci `svn st | grep -e "^[A|M]" | grep -v "test.js" | grep -ve "conf\.js$" | awk '{print $2}' | tr "\\n" " "` 中的span获取此信息。

1 个答案:

答案 0 :(得分:2)

PostgreSQL没有程序(不是T-SQL意义上的) - 并且函数结果类型是静态声明的 - 只需要查看表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;
                                 List of functions
┌────────┬───────┬──────────────────┬─────────────────────────────────────┬────────┐
│ Schema │ Name  │ Result data type │         Argument data types         │  Type  │
╞════════╪═══════╪══════════════════╪═════════════════════════════════════╪════════╡
│ public │ nanvl │ double precision │ double precision, character varying │ normal │
│ public │ nanvl │ double precision │ double precision, double precision  │ normal │
│ public │ nanvl │ numeric          │ numeric, character varying          │ normal │
│ public │ nanvl │ numeric          │ numeric, numeric                    │ normal │
│ public │ nanvl │ real             │ real, character varying             │ normal │
│ public │ nanvl │ real             │ real, real                          │ normal │
└────────┴───────┴──────────────────┴─────────────────────────────────────┴────────┘
(6 rows)

获取查询结果有点困难(但它完全通用) - 您必须创建预准备语句或游标,然后您可以使用API​​函数PQdescribePreparedPQdescribePortal`返回类型信息。