если вы хотите создать функцию, возвращающую setof record, вам нужно определить типы столбцов в вашем операторе select
Дополнительная информация
Ваш запрос должен выглядетьчто-то вроде этого:
select * from get_user_by_username('Username', True) as
f(user_id integer, user_name varchar, last_activity, varchar, created date, email archar, approved boolean, last_lockout timestamp, last_login timestamp,
last_password_changed timestamp, password_question varchar, comment varchar)
(вам, вероятно, потребуется изменить типы данных)
Лично я предпочитаю подход с типами.это гарантирует, что если функция отредактирована, все запросы будут возвращать правильные результаты.Это может быть неприятно, потому что каждый раз, когда вы изменяете аргументы функции, вам нужно заново создавать / отбрасывать типы, а также.
Например:
CREATE TYPE return_type as
(user_id integer,
user_name varchar,
last_activity varchar,
created timestamp,
email varchar,
approved boolean,
last_lockout timestamp ,
last_login timestamp,
last_password_changed timestamp,
password_question varchar,
comment varchar);
create or replace function get_user_by_username( username varchar(250), online
boolean) returns setof return_type as $$
declare _rec return_type;
begin
if online then
update users
set last_activity = current_timestamp
where user_name = username;
end if;
for _rec in select
user_id,
user_name,
last_activity,
created,
email,
approved,
last_lockout,
last_login,
last_password_changed,
password_question,
comment
from
users
where
user_name = username
limit 1
loop
return next _rec;
end loop
end;
$$ language plpgsql;