This topic created in 1226 days ago, the information mentioned may be changed or developed.
1. 背景
- 线网环境,不知道什么原因 PG 出现了异常,非人为重启,目前还未发现相关问题。用户使用过程中提示异常,经排查发现 PG 提示主键冲突,此时数据库表对应的序列已经回滚,数据库表中已经存在了重复数据
- 比如正常序列值应该是 5000 ,然后它被回滚到了 4000 。但是这个表里已经有 id:4000-5000 的数据,但是后来数据入库的时候 插入了部分 id:4000 - 4500 的数据,到 4501 的时候突然提示主键冲突
2. 版本
3. 求助
- 由于是线网环境,只能先修改序列值紧急恢复业务,但是不知道这种情况产生的原因是什么,有没有大佬能指点一二
6 replies • 2023-01-16 18:03:16 +08:00
 |
|
1
season8 Jan 16, 2023
不太懂原因,说个兜底方案看看是否可行:不使用自增序列,比如 snowflake id
|
 |
|
3
whnoob Jan 16, 2023
有没有大佬知道 PG 日志的保存天数是在哪配置的,目前瞅了一眼,只看到:log_rotation_age = 1d 和 log_rotation_size = 0 ,现场 pg_log 保留日志有六个月
|
 |
|
4
ttoh Jan 16, 2023
事务回滚不会回滚 serial 主键 (sequence)。猜测会不会是手动插入\导入的数据中带有主键,或者用 setval() 手动修改了序列的当前值
|
 |
|
5
whnoob Jan 16, 2023
@ ttoh 应该没有,现在维护就我一个人,一般出现问题才会连现场确认问题,很蛋疼
|
 |
|
6
whnoob Jan 16, 2023
@ whnoob 这个找到了,写在系统层面的备份日志:/etc/logrotate.d 里了,默认还是走自己的 log_filename
|