【发布时间】:2021-09-27 21:17:42
【问题描述】:
假设我有下表,函数和执行:
create table mytable (a INTEGER, b INTEGER);
create function test(q INTEGER)
returns table(a INTEGER, b INTEGER)
as
$body$
begin
return query select a,b from mytable;
end;
$body$
language plpgsql STABLE;
select * from test(1);
我收到“列名不明确”错误。我可以通过将选择更改为“从 mytable t 中选择 t.a, t.b”(根据一些类似的帖子)来摆脱它。但是当我的查询中只有 1 个表时,必须限定列名似乎很奇怪。我正在移植代码,该代码具有从单个表(以各种方式)中选择的大量存储过程并返回具有相同名称的列的表。有没有比这更好的方法来避免错误,并且仍然有一个具有相同列名的输出表?
感谢任何线索。
【问题讨论】:
-
返回集的schema总是和(a)表一样吗?然后你可以使用
... RETURNS SETOF mytable ...。 -
@stickybit 好点,至少可以涵盖其中一些 - 尽管定义存储过程的部分原因是确保结果独立于潜在的未来架构更改......所以使用这种方法,它们将再次紧密耦合...
标签: postgresql