即使没有 INSERT 发生,序列也会递增

问题描述

我有一个具有以下结构的表格:

CREATE TABLE web.cabinet_account_section (
    id serial NOT NULL,section_id text NULL,account_id int4 NULL,cabinet_param_id int4 NULL,CONSTRAINT cabinet_account_section_pkey PRIMARY KEY (id),CONSTRAINT cabinet_account_section_section_id_account_id_key UNIQUE (section_id),CONSTRAINT cabinet_account_section_account_id_fkey FOREIGN KEY (account_id) REFERENCES web.cabinet_account(id),CONSTRAINT cabinet_account_section_cabinet_param_id_fkey FOREIGN KEY (cabinet_param_id) REFERENCES web.cabinet_param(id)
);

该表每天更新。直到最近,该表的更新如下:如果 UNIQUE section_id 已经存在(即,执行了常规的 SELECT EXISTS),则不需要添加任何内容。每天约有10,000个条目来到入口处。

我决定用简单的 UPSERT 替换这个逻辑:

INSERT INTO web.cabinet_account_section (section_id,account_id,cabinet_param_id)
VALUES ('${view.id}','${account.id}',2)
ON CONFLICT DO nothing;

但是随后串行字段出现了一个小问题。对于每个 INSERT INTO 查询id 序列会自动递增,即使没有插入任何记录。列中的最后一个 id 是有条件的 = 1800。昨天表中出现了几条新记录,其 id 为:2300、2560、8120、9982。今天 id 已经超过 20,000。它尝试插入、增加计数器、不插入但不回滚计数器的那些。

我认为几个月后,即使不添加新行,它最终也会达到序列范围限制。

序列脚本:

CREATE SEQUENCE web.cabinet_account_id_seq
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 2147483647
    START 1
    CACHE 1
    NO CYCLE;

是否有可能以某种方式解决这个问题?当您从表中删除一条记录并且某种 ID 消失时,这是一回事。但是即使没有插入任何行,这里的序列也会呈指数增长。或者我应该返回旧版本并检查一下是否已经存在这样的 section_id?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)