PostgreSQL:错误:42601:返回“记录”的函数需要列定义列表

(免责声明:Postgresql newbie。)

好的,据我所知,我的功能类似于我所看到的样品。有人能告诉我如何让我上班吗?

create or replace function get_user_by_username(
    username varchar(250),online boolean
    ) returns setof record as $$
declare result record;
begin

    if online then 
        update users
        set last_activity = current_timestamp
        where user_name = username;
    end if;

    return query
    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;

    return;
end;
$$ language plpgsql;
如果要创建返回setof记录的函数,则需要在select语句中定义列类型

More info

你的查询应该是这样的:

select * from get_user_by_username('Username',True) as 
  f(user_id integer,user_name varchar,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,last_activity varchar,created timestamp,email 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,comment
      from
        users
      where
        user_name = username
      limit 1 
    loop

      return next _rec;

    end loop

end;
$$ language plpgsql;

相关文章

来源:http://www.postgres.cn/docs/11/ 4.1.1. 标识符和关键词 SQL标识符和关键词必须以一个...
来源:http://www.postgres.cn/docs/11/ 8.1. 数字类型 数字类型由2、4或8字节的整数以及4或8...
来源:http://www.postgres.cn/docs/11/ 5.1. 表基础 SQL并不保证表中行的顺序。当一个表被读...
来源:http://www.postgres.cn/docs/11/ 6.4. 从修改的行中返回数据 有时在修改行的操作过程中...
来源:http://www.postgres.cn/docs/11/ 13.2.1. 读已提交隔离级别 读已提交是PostgreSQL中的...
来源:http://www.postgres.cn/docs/11/ 9.7. 模式匹配 PostgreSQL提供了三种独立的实现模式匹...