Postgresql 函数中的列命名
我想创建一个返回类似结果的表的 PSQL 函数。我的函数定义如下所示:
create or replace function myfunc1()
returns table(id varchar(50), title varchar(50))
as $$
begin
return query select id, title from books;
end;
$$ language plpgsql;
但是,当我调用该函数时,出现此错误:
错误:列引用“id”不明确 第 1 行:从书籍中选择 id、标题 ^ 详细信息:它可以引用 PL/pgSQL 变量或表列。
显然,这是因为我在返回表和目标表中都使用了列名“id”。最简单的解决方案是更改列名称。但我来这里是为了寻找一种方法,让我可以使用我想要的列名称。此外,更改名称会使我的代码变得奇怪,并且其他人难以理解。
I want to create a PSQL function which returns a table like result. My function definition looks like below:
create or replace function myfunc1()
returns table(id varchar(50), title varchar(50))
as $
begin
return query select id, title from books;
end;
$ language plpgsql;
But, when I call the function, I got this error:
ERROR: column reference "id" is ambiguous
LINE 1: select id, title from books
^
DETAIL: It could refer to either a PL/pgSQL variable or a table column.
Apparently, it is because I use the column name 'id' in both the return table and my target table. The simplest solution would be changing the column names. But I am here to look for a way that would let me use the column name I want. Besides, changing the name would make my code weird, and difficult for other to understand.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
通过限定列名来消除歧义:
Remove the ambiguity by qualifying column names:
从书籍中选择 books.id、标题
?SELECT books.id, title FROM books
?... returns table(id varchar(50), title varchar(50)) ...
函数定义的一部分只是 另一种定义 OUT 参数的方法。现在您有两个名为id
和title
的 OUT 参数,以及您引用的两列(来自book
表)... 是的,你猜对了 -id
和title
。避免这种歧义的方法是在函数定义中重命名返回表的列名称:
That
... returns table(id varchar(50), title varchar(50)) ...
part of the function definition is just another way to define OUT parameters. So now you have two OUT parameters namedid
andtitle
and two columns (from thebook
table) you refer to named... yes, you guessed it -id
andtitle
.A way to avoid this ambiguity is to rename the column names of the returned table in your function definition: