从 Postgres 中的表函数返回多行的最简单方法是啥?
Posted
技术标签:
【中文标题】从 Postgres 中的表函数返回多行的最简单方法是啥?【英文标题】:What is the simplest way to return multiple rows from table function in Postgres?从 Postgres 中的表函数返回多行的最简单方法是什么? 【发布时间】:2021-07-14 06:11:32 【问题描述】:有一个表my_table
,我想通过表函数查询。
create table my_table (
col_1 text,
col_2 numeric
// 10 more columns
);
根据 Internet 上的文档和文章,有几种方法可以做到这一点。但是它们中的大多数都涉及定义一个行类型来复制结果表的结构,例如
create function ... returns table( col_1 text, col_2 numeric, ...)
在这种情况下。
我找到的最简单的方法如下:
create or replace function my_func(p_x text)
returns my_table
as
$$
select * from my_table where col_1 = p_x;
$$
language sql;
--
select * from my_func('hello');
不幸的是,它只返回结果的第一行,尽管查询返回了很多。这不是我所期望的。
如果我们把函数头改成
create or replace function my_func(p_x text)
returns table( col_1 text, col_2 numeric, /* and others */)
它工作正常,但最好避免这种重复并在此处重用 my_table
的行类型。
如何定义一个函数,其表结果与my_table
中的列完全相同?
【问题讨论】:
如果答案解决了您的问题,请接受。接受答案有助于未来的提问者遇到同样的问题。不要只留下一个已回答的问题。 【参考方案1】:您需要将函数定义为returns setof my_table
,以表明它返回一个集合,而不仅仅是一行:
create or replace function my_func(p_x text)
returns SETOF my_table
as
$$
select * from my_table where col_1 = p_x;
$$
language sql;
【讨论】:
感谢您的聪明才智和超快的反应。以上是关于从 Postgres 中的表函数返回多行的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章