【发布时间】:2014-06-19 13:49:03
【问题描述】:
我已经相应地设置了一张桌子:
CREATE TABLE raw (
id SERIAL,
regtime float NOT NULL,
time float NOT NULL,
source varchar(15),
sourceport INTEGER,
destination varchar(15),
destport INTEGER,
blocked boolean
); ... + index and grants
我已经成功使用了这个表一段时间了,突然下面的插入不再起作用了..
INSERT INTO raw(
time, regtime, blocked, destport, sourceport, source, destination
) VALUES (
1403184512.2283964, 1403184662.118, False, 2, 3, '192.168.0.1', '192.168.0.2'
);
错误是:ERROR: integer out of range
甚至不知道从哪里开始调试这个。我没有用完磁盘空间,而且错误本身有点谨慎。
【问题讨论】:
-
显示整个插入命令。
-
@ClodoaldoNeto 就是这样.. 复制和粘贴.. Unix 时间戳分别是
1403184512.2283964和1403184662.118,两者都很好,并且不会以任何方式影响结果。它们也被放置在插入 clumn 定义和值定义的开头。所以位置不是这里的问题。 -
您的
id生成器是否有可能通过 2^31? -
试试
select max(id) from raw。您也可以尝试将 ID 的类型从 SERIAL(4 字节有符号整数)更改为 BIGSERIAL(8 字节有符号整数)。分享和享受。 -
无法在 PostgreSQL 9.3 上重现。 “id”列下的序列是最有可能的问题。
select currval('raw_id_seq')返回什么? (您的序列名称可能不同;我的是 PostgreSQL 的默认名称。)
标签: postgresql