postgresql函数:Final语句返回bigint而不是integer

postgresql函数:Final语句返回bigint而不是integer,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,我正在使用PostgreSQL 8.4版,并编写了以下自定义分组函数: CREATE OR REPLACE FUNCTION custom_group(integer) RETURNS TABLE ( grp INTEGER, entry_date DATE, col1 REAL, col2 REAL, col3 REAL, col4 REAL, col5 INTEGER, col6 INTEGER) AS $BODY$ SELECT ceil(rank() OVER (ORDER BY

我正在使用PostgreSQL 8.4版,并编写了以下自定义分组函数:

CREATE OR REPLACE FUNCTION custom_group(integer)
RETURNS TABLE (
grp INTEGER,
entry_date DATE,
col1 REAL,
col2 REAL,
col3 REAL,
col4 REAL,
col5 INTEGER,
col6 INTEGER) AS
$BODY$
    SELECT ceil(rank() OVER (ORDER BY entry_date) / $1)::int as grp
          ,entry_date, col1, col2, col3, col4, col5, col6
    FROM   table_foo 
    ORDER  BY 1;
$BODY$ LANGUAGE SQL;
当我尝试使用psql将函数导入时,出现以下错误:

Final语句返回bigint而不是integer

我不理解错误消息,尤其是因为我希望返回记录(井表)类型

导致错误的原因是什么,如何修复

[[编辑]]

我按照注释中的建议将grp数据类型更改为BIGINT,但是我得到了相同的错误。详情:

ERROR:  return type mismatch in function declared to return record
DETAIL:  Final statement returns integer instead of bigint at column 1.
CONTEXT:  SQL function "custom_group"

在编辑之后,您现在会得到一个不同的错误。您应该得到这个新错误,因为您显式地将列1强制转换为
int
,并将其声明为
bigint
。我猜您最初的问题是
table\u foo
中的
col5
col6
是一个
bigint
ceil()
返回一个
bigint
,您将
grp
定义为
int
。尝试将返回表定义中的
grp
更改为
bigint
。@juergend:我试过了,但错误仍然存在。请看我编辑的问题。您能修改示例以重现错误吗?(发回新链接)ceil()无论如何不会返回bigint,请参阅psql中
\df ceil
命令的结果。初始错误消息
Final语句不是返回bigint而不是integer
,后跟一个列号吗?如果是,请复制粘贴整个邮件。没有理由认为问题出在第1列。@DanielVérité:完整的消息是
Final语句在第1列返回整数而不是bigint
BTW,这是在我将grp数据类型更改为bigint之后。