如何使用 pgAdmin 4.2 从 PG/PLSQL 中的函数返回整个 table 数据或多行。?

How to get entire table data or multiple rows returned from a function in PG/PLSQL with pgAdmin 4.2.?

我尝试使用 setof 和 table。pgAdmin 4.2 中创建函数时没有 return类型称为 setof 或 table。如果我使用 setof 和 table 名称创建函数作为选定的 return 类型,它只会 return 一行 table。

CREATE FUNCTION pgsql_returnrecords() RETURNS SETOF RECORD(name char, city, char, id integer) AS 
$BODY$
DECLARE
 rec RECORD;
BEGIN
select name,city,id INTO rec from test;
return next rec;
END;
$BODY$ language plpgsql;

我希望我的函数 return table 具有所有行和列的数据。

它可以是 returns setof recordreturns table(....)setof table_name 对于 returns setof record 你必须在 使用 时指定列名函数。

您也没有 return 获得完整的结果,因为您只获取一行,将其放入记录中,然后 return 那个。要 return 一个真正的 "set",您需要在 PL/pgSQL 中使用 return query。但是这样的函数最好写成 SQL 函数:

CREATE FUNCTION pgsql_returnrecords() 
  RETURNS table(name text, city text, id integer) 
AS 
$BODY$
  select name,city,id 
  from test;
$BODY$ 
language sql;

如果您希望始终 return 来自 table test 的完整行,您可以使用 returns setof test 而不是 returns table(..)[=22 来简化它=]

CREATE FUNCTION pgsql_returnrecords() 
  RETURNS setof test
AS 
$BODY$
  select *
  from test;
$BODY$ language sql;

或者,如果你坚持PL/pgSQL:

CREATE FUNCTION pgsql_returnrecords() 
  RETURNS table(name text, city text, id integer) 
AS 
$BODY$
BEGIN
return query
  select name,city,id   
  from test;
END;
$BODY$ 
language plpgsql;

在这两种情况下,您都必须在 FROM 子句中使用类似 table 的函数:

select *
from pgsql_returnrecords() ;