【发布时间】:2020-03-02 21:39:36
【问题描述】:
我声明了一个 Postgres 函数,它从一个已经存在的表中返回一组记录。
create function foo_get(b bar)
returns setof foo as $$
select foo.*
from foo
where foo.bar = b.id;
$$ language sql stable;
这是我编写的实际函数的简化,但按预期工作(它返回 foo 的所有列,用于我想要查找的所有记录)。
但是,如果我尝试以以下方式专门访问这些列,Postgres 会抱怨:
select wumbo.id from
(select foo(bar) from bar) as "wumbo";
这导致说 wumbo 没有 id 列,即使如果我只要求 select wumbo.* 而不是 select wumbo.id,id 数据也会返回。
如果我在这里做一些违反范式的事情我很好(如果我这样做我并不感到惊讶),但我想了解原因。返回 setof foo 不等于返回我的 foo 表的完整架构吗? Postgres 是否将我返回的记录转换为没有列类型的匿名记录?
【问题讨论】:
标签: postgresql