diff --git a/docs/superpowers/specs/2026-04-20-comment-email-config-design.md b/docs/superpowers/specs/2026-04-20-comment-email-config-design.md index d391a1c..4fcdd02 100644 --- a/docs/superpowers/specs/2026-04-20-comment-email-config-design.md +++ b/docs/superpowers/specs/2026-04-20-comment-email-config-design.md @@ -224,3 +224,29 @@ 4. 接入通知发送服务与日志。 5. 增加管理员测试发件接口与按钮。 6. 完成测试与联调验收。 + +## 10. 数据库迁移回滚预案(Task4) + +### 10.1 限制说明(SQLite) + +- SQLite 不支持通用 `DROP COLUMN` 语法,无法直接删除 `post_comments.guest_email` 与 `post_comments.guest_is_anonymous`。 +- 因此 Task4 回滚不能依赖“反向删列”语句,必须采用“建新表 + 搬迁 + 替换”的结构化回滚方案。 + +### 10.2 回滚执行前置条件 + +- 仅在维护窗口执行,暂停写入评论相关流量,避免迁移过程中出现并发写导致数据不一致。 +- 执行前完成数据库备份(至少一份可恢复快照),并验证备份可用性后再开始回滚。 + +### 10.3 回滚步骤(可执行) + +1. 创建临时表(例如 `post_comments_rollback`),字段集合与回滚前结构一致,**不包含** `guest_email`、`guest_is_anonymous`。 +2. 将原 `post_comments` 的保留字段按列名显式写入临时表(禁止 `SELECT *`,避免列位错配)。 +3. 删除或重命名原 `post_comments` 表。 +4. 将临时表重命名为 `post_comments`,完成结构替换。 +5. 按回滚前定义重建 `post_comments` 相关索引、唯一约束与外键约束(如有)。 +6. 执行完整性校验(记录条数、关键查询、外键检查)并恢复流量。 + +### 10.4 风险与注意事项 + +- 回滚方案仅调整表结构,不应修改业务逻辑代码与已发布 migration 文件。 +- 若任一步骤异常,立即停止后续操作,使用回滚前备份恢复并重新评估。