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

时间:2021-06-09 17:26:12

标签: postgresql

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

现有的基于 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_schema.columns 中查找该表,组合我需要的内容并删除临时表...将所有这些放入一个函数中。

1 个答案:

答案 0 :(得分:2)

您可以查询目录表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;
相关问题