首页 > 解决方案 > 在简单的 PostgreSQL 函数返回表中避免“歧义列”

问题描述

假设我有下表、函数和执行:

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 中选择 ta,tb”(根据一些类似的帖子)来摆脱它。但是当我的查询中只有 1 个表时,必须限定列名似乎很奇怪。我正在移植代码,该代码具有从单个表(以各种方式)中选择的大量存储过程并返回具有相同名称的列的表。有没有比这更好的方法来避免错误,并且仍然有一个具有相同列名的输出表?

感谢任何线索。

标签: postgresql

解决方案


你可以(你应该)使用别名。

create table mytable (a INTEGER, b INTEGER);

create function test(q INTEGER)
returns table(a INTEGER, b INTEGER)
as
$body$
begin
    return query select mt.a, mt.b from mytable mt;
end;
$body$
language plpgsql STABLE;

select * from test(1);

推荐阅读