postgresql - 整数超出范围

时间:2014-06-19 13:49:04

标签: postgresql integer runtime-error

没有丝毫想到为什么会发生这种情况......

我已相应地设置了一个表格:

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

我的意思是comon ... 甚至不确定从哪里开始调试这个..我不是没有磁盘空间而且错误本身有点谨慎..

1 个答案:

答案 0 :(得分:30)

SERIAL列存储为INTEGER s,最大值为2 31 -1。因此,在大约20亿次插入后,您的新id值将不再适合。

如果您希望在表格的整个生命周期中使用这么多插页,请使用BIGSERIAL创建它(内部为BIGINT,最多为2 63 -1)

如果您稍后发现SERIAL不够大,可以使用以下内容增加现有字段的大小:

ALTER TABLE raw ALTER COLUMN id TYPE BIGINT;

请注意,这里BIGINT而不是BIGSERIALserials aren't real types)。请记住,如果您的表中实际上有20亿条记录,这可能需要一段时间......