yida-db-seq-fix · git:20260414.a0ded0d · 2026-04-14 · sha256 0b9f4c93d8399b88

yida-db-seq-fix git:20260414.a0ded0dA

Immutable. This exact content is served forever at /api/v1/blob/0b9f4c93d8399b88.

---
name: yida-db-seq-fix
description: PostgreSQL Sequence 自动修复工具。检测并修复宜搭环境检测自动建表时 Sequence 起始值问题,避免主键冲突。当用户提到"Sequence"、"主键冲突"、"自增ID错误"、"db-seq-fix"时触发。
---

# PostgreSQL Sequence 自动修复

## 严格禁止 (NEVER DO)

- 不要在生产环境直接执行 `--fix`,必须先用 `--dry-run` 预览
- 不要在未确认数据库连接的情况下执行修复操作
- 不要跳过 Sequence 检测直接修改数据库

## 严格要求 (MUST DO)

- 执行修复前必须先用 `--dry-run` 确认影响范围
- 修复完成后必须验证 Sequence 值是否正确更新
- 记录修复操作日志,便于问题追溯

## 适用场景

| 用户意图 | 触发条件 |
|---------|---------|
| Sequence 起始值检测 | 环境检测自动建表后,需要验证 Sequence 配置 |
| 主键冲突修复 | 插入数据时报 `duplicate key value violates unique constraint` 错误 |
| 预防性检查 | 数据迁移后,确保 Sequence 值正确 |

---

## 背景

宜搭环境检测自动建表时,PostgreSQL 的 Sequence 默认使用 `START 1`。如果数据迁移时已有数据,Sequence 起始值可能小于已有数据的最大 ID,导致插入时报主键冲突错误。

此工具用于:
1. 检测 8 个核心表的 Sequence 当前值
2. 对比表中实际最大 ID
3. 自动将 Sequence 起始值设置为 `max(id) + 1`

## 命令

### 预览模式(推荐先执行)

```bash
openyida db-seq-fix --dry-run
```

输出示例:
```
📋 Sequence 检测报告

表名                    当前值    最大ID    状态
─────────────────────────────────────────────
form_component          1         1000      ⚠️ 需要修复
form_definition         1         500       ⚠️ 需要修复
...

💡 使用 openyida db-seq-fix --fix 执行自动修复
```

### 执行修复

```bash
openyida db-seq-fix --fix
```

输出示例:
```
✅ Sequence 修复完成

表名                    修复前    修复后
────────────────────────────────────────
form_component          1         1001
form_definition         1         501
...
```

## 监控的表

| 表名 | Sequence 名称 |
|------|--------------|
| form_component | form_component_id_seq |
| form_definition | form_definition_id_seq |
| form_instance | form_instance_id_seq |
| form_permission | form_permission_id_seq |
| process_definition | process_definition_id_seq |
| process_instance | process_instance_id_seq |
| process_task | process_task_id_seq |
| system_log | system_log_id_seq |

## 参数说明

| 参数 | 说明 |
|------|------|
| `--dry-run` | 仅检测,不执行修复,输出检测报告 |
| `--fix` | 执行自动修复,将 Sequence 起始值设置为 `max(id) + 1` |

## 错误处理

| 错误信息 | 原因 | 处理方式 |
|---------|------|---------|
| `数据库连接失败` | 数据库配置错误或服务不可用 | 检查数据库连接配置 |
| `表不存在` | 表尚未创建 | 先执行环境检测建表 |
| `Sequence 不存在` | Sequence 未正确创建 | 手动创建 Sequence |

## 注意事项

1. **生产环境谨慎操作**:建议在低峰期执行,避免影响业务
2. **备份数据**:修复前建议备份数据库
3. **验证结果**:修复后执行测试插入,确认问题已解决
4. **日志记录**:修复操作会记录到系统日志,便于追溯