dispatch_fix_grade_identity.sql 1.5 KB

1234567891011121314151617181920212223242526
  1. -- =====================================================================
  2. -- dispatch_fix_grade_identity.sql
  3. -- 修复 dis_event_grade 主键序列未对齐导致的新增报错
  4. -- ---------------------------------------------------------------------
  5. -- 现象:新增分级标准报「重复键违反唯一约束 dis_event_grade_pkey,
  6. -- 键值 (id)=(0) 已经存在」,INSERT 语句本身未包含 id 列。
  7. -- 根因:分级标准数据由旧表带显式 id 迁移而来,identity 序列未同步推进
  8. -- (仍在 0 附近),INSERT 不带 id 时自动生成 0,撞已存在行。
  9. -- 说明:新库/升级库请优先执行 dispatch_named_id_sequences.sql,统一切换到
  10. -- app_user.dis_event_grade_id_seq;本文件仅保留该固定序列的校准动作。
  11. -- 执行方式:KingbaseES 客户端执行第 1 段即可;第 2 段用于核验。
  12. -- =====================================================================
  13. -- 1) 校准序列:从 max(id) 之后继续发号
  14. SELECT setval(
  15. 'app_user.dis_event_grade_id_seq',
  16. GREATEST((SELECT COALESCE(max(id), 1) FROM app_user.dis_event_grade), 1)
  17. );
  18. -- 2) 核验:nextval 应大于 max_id
  19. SELECT COALESCE(max(id), 0) AS max_id,
  20. nextval('app_user.dis_event_grade_id_seq') AS next_id
  21. FROM app_user.dis_event_grade;
  22. -- 附:同批次从旧表迁移过的其他调度表可顺带自检(把表名换掉执行第 1 段):
  23. -- dis_event / dis_event_log / dis_plan / dis_plan_version / dis_event_assess