当前位置: 首页 > 知识库问答 >
问题:

Postgres函数:获取返回表列的详细信息

鲜于致远
2023-03-14

我觉得需要获取任何具有“record”返回数据类型的函数返回的表的列名和数据类型,因为。。。

现有基于SQL Server的系统中的一个关键进程使用一个存储过程,该存储过程将用户定义的函数作为参数。初始步骤获取作为参数传递的函数返回的表的列名和类型。

在Postgres 13中,我可以使用pg_proc.prorettype和相应的pg_type来查找返回记录类型的函数...这是一个开始。我也可以使用pg_get_function_result()来获取包含我需要的信息的字符串。但是,这是一个字符串,虽然我最终将不得不组装一个非常相似的字符串,但这只是信息的一个应用程序。是否有一个包含(column_name、data_type、ordinal_position)的表格等效项,或者我需要自己做吗?

在创建此类函数时,是否可以访问系统可能已创建的复合数据类型?

我认为有一个选择对我来说是可行的,但我觉得有点奇怪,那就是:

> create temp table t as select * from function() limit 0;

然后在info_模式中查找该表。列,组装我需要的东西,放下临时表。。。把所有这些都放到一个函数中。

共有1个答案

胡景焕
2023-03-14

您可以查询目录表pg_proc,其中包含所有必需的信息:

SELECT coalesce(p.na, 'column' || p.i),
       p.ty::regtype,
       p.i
FROM pg_proc AS f
   CROSS JOIN LATERAL unnest(
                         coalesce(f.proallargtypes, ARRAY[f.prorettype]),
                         f.proargmodes,
                         f.proargnames
                      )
                      WITH ORDINALITY AS p(ty,mo,na,i)
WHERE f.proname = 'interval_ok'
  AND coalesce(p.mo, 'o') IN ('o', 't')
ORDER BY p.i;
 类似资料:
  • 接口说明 获取角色详细信息 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /permissions/api/team/role/v1.0.0/info 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN roleId string query 是

  • 接口说明 获取素材详细信息 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /wish3dearth/api/material/v1.0.0/getMaterialDetail 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 serviceDomain string query 否 serviceDomain t

  • 接口说明 获取角色详细信息 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /permissions/api/team/role/v1.0.

  • 接口说明 获取素材详细信息 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /wish3dearth/api/material/v1.0.0

  • 问题内容: 是否可以获取从调用范围返回函数的行号? 例: 我认为这是不可能的,因为它应该已经从堆栈中删除了,但是也许它仍然被缓存在某个地方? 用例是我有一个HTTP处理程序,我想记录返回错误的行和文件名,而不必乱扔代码。 问题答案: AFAIK,不可能自动获取执行最后一次返回的行。 但是,有了一个小帮手,您可以拥有: 操场 输出:

  • 以下是我希望通过REST API从Keycloak检索的参数: 领域名称 领域ID 用户名 电子邮件 名字 已启用用户 是否有人使用REST API从keycloak获取这些细节,请分享REST API URL细节。