V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whnoob
V2EX  ›  PostgreSQL

PG 主键重复问题咨询

  •  
  •   whnoob · 2023-01-16 15:17:34 +08:00 · 1613 次点击
    这是一个创建于 703 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1. 背景

    • 线网环境,不知道什么原因 PG 出现了异常,非人为重启,目前还未发现相关问题。用户使用过程中提示异常,经排查发现 PG 提示主键冲突,此时数据库表对应的序列已经回滚,数据库表中已经存在了重复数据
    • 比如正常序列值应该是 5000 ,然后它被回滚到了 4000 。但是这个表里已经有 id:4000-5000 的数据,但是后来数据入库的时候 插入了部分 id:4000 - 4500 的数据,到 4501 的时候突然提示主键冲突

    2. 版本

    • PG9.4.5

    3. 求助

    • 由于是线网环境,只能先修改序列值紧急恢复业务,但是不知道这种情况产生的原因是什么,有没有大佬能指点一二
    6 条回复    2023-01-16 18:03:16 +08:00
    season8
        1
    season8  
       2023-01-16 15:23:43 +08:00
    不太懂原因,说个兜底方案看看是否可行:不使用自增序列,比如 snowflake id
    whnoob
        2
    whnoob  
    OP
       2023-01-16 15:31:35 +08:00
    @season8 这是目前踩完坑之后后续的业务避坑方案
    whnoob
        3
    whnoob  
    OP
       2023-01-16 16:20:50 +08:00
    有没有大佬知道 PG 日志的保存天数是在哪配置的,目前瞅了一眼,只看到:log_rotation_age = 1d 和 log_rotation_size = 0 ,现场 pg_log 保留日志有六个月
    ttoh
        4
    ttoh  
       2023-01-16 17:04:30 +08:00
    事务回滚不会回滚 serial 主键 (sequence)。猜测会不会是手动插入\导入的数据中带有主键,或者用 setval() 手动修改了序列的当前值
    whnoob
        5
    whnoob  
    OP
       2023-01-16 17:25:28 +08:00
    @ttoh 应该没有,现在维护就我一个人,一般出现问题才会连现场确认问题,很蛋疼
    whnoob
        6
    whnoob  
    OP
       2023-01-16 18:03:16 +08:00
    @whnoob 这个找到了,写在系统层面的备份日志:/etc/logrotate.d 里了,默认还是走自己的 log_filename
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1280 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 23:37 · PVG 07:37 · LAX 15:37 · JFK 18:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.