PostgreSQL 函数中的列引用不明确

Posted

技术标签:

【中文标题】PostgreSQL 函数中的列引用不明确【英文标题】:Column reference is ambiguous in PostgreSQL function 【发布时间】:2021-12-14 04:30:03 【问题描述】:

我已经创建了一个这样的函数。

create or replace function pesquisar_imoveis_residenciais_venda()
returns table(preco decimal)
as $$
begin

    select preco from casa_venda;

end; $$

language 'plpgsql';

当我调用它时

  select pesquisar_imoveis_residenciais_venda()

我得到列引用 preco 不明确。

我已经访问了一些相关的问题。但是它们太难理解了,非常复杂的功能。

【问题讨论】:

对于这样的简单查询,language sql 函数会更高效 【参考方案1】:

RETURNS QUERY子句中定义的列是PL/pgSQL函数体中的变量,所以变量preco和同名表列之间存在歧义。您需要使用表名或函数名来限定引用以消除歧义。

但是您的函数定义还有其他问题。我想你想要:

create or replace function pesquisar_imoveis_residenciais_venda()
returns table(preco decimal)
as $$
begin
    return query select cv.preco from casa_venda cv;
end; $$

language 'plpgsql';

select *
from pesquisar_imoveis_residenciais_venda();

Here 是一个 dbfiddle。

【讨论】:

【参考方案2】:

表示 casa_venda 表中的列名 Preco 不存在或存在超过 1 次。

【讨论】:

这是错误的。问题是preco 也是输出列的名称,因此不明确。

以上是关于PostgreSQL 函数中的列引用不明确的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Oracle 不在这里抛出“不明确的列引用”?

Postgresql函数返回有变化的表

PostgreSQL。选择与聚合函数中的值相关的列

postgres 错误:Postgresql 11.6 中的列不存在错误

where 子句中的列不明确 - 这是啥意思?

where 子句中的列“id”不明确