专有代码(我们无法更改)具有一堆用户定义的类型函数:
create or replace function f() returns record as $$ ... $$
我们通过以下方式调用(例如):
SELECT status, log FROM f() as (status boolean, log text);
(status boolean, log text)
是 table 的行类型T
。是否可以在不列出属性的情况下自动将record
(或setof record
返回类型)转换为行类型?T
我正在寻找的是那种:
SELECT * FROM f() as T%rowtype
有一种方法。
给定一个表
t
和一个f()
返回与该表类型匹配的匿名记录的函数:您不能只转换匿名记录,因为需要列定义列表
引用SELECT 命令的手册:
大胆强调我的。
因此,虽然所有这些查询都有效:
这些都不做:
后者引发异常:
您可以将
SELECT
with 列定义列表包装到@a_horse和@deszo建议的VIEW
或函数中。那会很好用:但这不会回答你的问题:
单排解决方案
虽然强制转换失败,但plpgsql 中的分配有效。
称呼:
虽然您也可以使用该模式编写集合返回函数,但我没有找到在
SELECT
不提供列定义列表的情况下从集合返回函数...db<>fiddle here
旧sqlfiddle