PostgreSQL函数报错:column reference 'preco' is ambiguous 求解
解决PostgreSQL函数中"column reference 'preco' is ambiguous"错误
嘿,我来帮你搞定这个问题!你遇到的这个歧义错误,本质是PL/pgSQL搞不清楚你写的preco到底是指函数返回表定义里的列,还是**casa_venda表中的列**——因为两者名字完全一样,数据库直接懵了。
两种简单的解决方法:
方法1:给查询的列加上表名/别名限定
直接在查询的preco前加上表名,明确告诉数据库你要的是casa_venda表里的preco字段。修改后的函数代码如下:
create or replace function pesquisar_imoveis_residenciais_venda() returns table(preco decimal) as $$ begin select casa_venda.preco from casa_venda; end; $$ language 'plpgsql';
或者给表起个短别名,代码更简洁:
create or replace function pesquisar_imoveis_residenciais_venda() returns table(preco decimal) as $$ begin select cv.preco from casa_venda cv; end; $$ language 'plpgsql';
方法2:使用return query明确返回结果(更规范的PL/pgSQL写法)
其实在PL/pgSQL中返回表类型的函数,更推荐用return query来直接返回查询结果,这样能避免很多隐性的歧义问题。修改后的代码如下:
create or replace function pesquisar_imoveis_residenciais_venda() returns table(preco decimal) as $$ begin return query select preco from casa_venda; end; $$ language 'plpgsql';
这种写法会明确把查询结果映射到返回表的列上,数据库不会再混淆preco的指向。
验证修改
修改完函数后,再执行select pesquisar_imoveis_residenciais_venda();,应该就能正常返回结果啦!
内容的提问来源于stack exchange,提问作者Diego Alves
相关产品推荐
相关产品推荐

