我相应地摆了一张桌子:

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

甚至不知道从哪里开始调试这个..我没有磁盘空间不足,错误本身也有点谨慎.

推荐答案

SERIAL列存储为INTEGER,最大值为231-1.因此,在大约20亿次插入后,新的id个值将不再适合.

如果您希望在表的整个生命周期内插入这么多内容,请使用BIGSERIAL(内部为BIGINT,最大值为263-1)创建它.

如果以后发现SERIAL不够大,可以通过以下方式增加现有字段的大小:

ALTER TABLE raw ALTER COLUMN id TYPE BIGINT;

注意这里是BIGINT,而不是BIGSERIAL(serials aren't real types).请记住,如果你的表中有20亿条记录,这可能需要一段时间...

Postgresql相关问答推荐

如何在Common Lisp中使用Postmodern在表更改时获得通知?

Postgres BULK INSERT如何影响Debezium?

列索引8上的扫描错误,名称已复制:不支持扫描,正在存储驱动程序.值类型[]uint8到类型*[]*bool

Gorm 中的更新将created_at、updated_at 作为默认时间

右连接 postgresql 出现语法错误

使用 WHERE 子句创建递归视图

Upper() 不会大写重音字符

Docker compose read connection reset by peer error on pipeline

为什么这里的默认格式不同? (ISO 8601 的两种不同实现)

Windows上的psql:错误:编码UTF8的字节序列无效:0xc8 0x20

有没有办法使用postgresql将具有不同ID的同一行多次添加到表中?

PG::UndefinedTable:错误:relation "active_storage_blobs" does not exist

Docker - 判断 postgres 是否准备好

Nodejs应用程序的node-postgres vs pg-promise

INSERT RETURNING 是否保证以 right的顺序返回?

获取带有时区偏移的日期

并发刷新materialized视图

timezone date_trunc 函数

从 PostgreSQL 中的数字获取月份名称

无法在 postgresql hibernate 中使用名为user的表