Это либо returns setof record
, либо returns table(....)
, либо setof table_name
. С returns setof record
необходимо указать имена столбцов, когда с использованием функции.
Вы также не возвращаете полный результат, потому что вы выбираете только одну строку, помещаете ее в запись и возвращаете ее. Чтобы вернуть реальный «набор», вам нужно использовать return query
в PL / pgSQL. Но такая функция гораздо лучше написана как функция SQL:
CREATE FUNCTION pgsql_returnrecords()
RETURNS table(name text, city text, id integer)
AS
$BODY$
select name,city,id
from test;
$BODY$
language sql;
Если вы хотите всегда возвращать полную строку из таблицы test
, вы можете упростить это, используя returns setof test
вместо returns table(..)
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:
select *
from pgsql_returnrecords() ;