背景
临近下班,数据库中数有一张临时表用来做界面展示的,这张表的数据是来自另外一张表,研发反馈程序有异常,无赖的是程序也没有对应的日志,然后从数据库层面进行排查
问题分析
表结构分析
CREATE TABLE cert_display_tmp
(
id integer NOT NULL DEFAULT nextval('cert_display_tmp2_id_seq'::regclass),
cert_id bigint,
total_sample bigint NOT NULL DEFAULT 0,
CONSTRAINT cert_display_tmp2_pkey PRIMARY KEY (id)
)
该表的id字段是一个整型,又是一个自增序列,之前跟研发聊过他们的使用的的自研框架,框架会自动生成序列的id值,然后插入数据库中,并不是使用数据库的序列,怀疑问题出现在这里
整体分析
查看了下一个序列值是‘2147483648’,integer类型的范围是( -2147483648 to +2147483647),正好超过了integer的范围
postgres=#=> select nextval('cert_display_tmp2_id_seq');
nextval
------------
2147483648
(1 row)
问题修复
更改id的字段类型为bigint型,然后再让研发确认,已无问题,故障解决
alter table cert_display_tmp alter column id bigint
总结
虽然问题很小,通常都是一些研发上很细节的问题,但是也是最容易出现问题,研发上还是要建议统一的规范