# 公共基础迁移发布与数据安全回滚 ## 执行顺序 1. 使用 `./scripts/test-tech-public-foundation.sh` 完成真实依赖公共接缝验收,再使用 `go run ./cmd/foundation-check --phase pre` 执行只读前置检查。 2. 依次执行 `000165_create_public_outbox`、`000166_create_system_config` 正向迁移。 3. 使用 `go run ./cmd/foundation-check --phase post` 验证字段、约束、索引、异常计数和事务内读写冒烟。 4. 部署兼容 API 和 Outbox Relay/Worker,确认监控就绪后再部署依赖消费者,最后允许前端或生产者放量。 门禁报告只输出稳定错误码、数据库对象安全标识和计数。依赖迁移版本不足或脏状态、对象定义冲突、重复身份、空值、非法枚举、未完成任务、未投递事件和过期租约均以非零状态阻断。 ## 数据迁移与隔离 165/166 只创建新的公共表和索引,不回填历史业务数据,因此没有批次回填步骤。后续确需回填时必须按稳定主键分批记录进度,允许中断重跑并验证行数守恒;不得借本次迁移扫描或改写下游业务表。 自动化验收在独立 PostgreSQL schema 和测试事务内执行,只删除本次创建的 schema 或依赖事务回滚,不执行全库清理。Redis/Asynq 测试使用唯一事件 ID 和配置 Key,并只删除本次任务与缓存键。 ## 回滚边界 新增表为空时,down 迁移允许删除结构。任一公共表已经保存事件或配置事实时,down 迁移主动失败;发布负责人必须停止新生产者、停止 Relay 领取、保留已有事实,回滚无数据风险的应用版本,并修复后向前恢复。禁止通过删表、清空 Outbox 或删除配置事实完成降级。 停止条件包括:迁移门禁异常、Outbox 持续积压或过期租约大量增加、配置读写不一致、Access Log 脱敏回归失败和关键任务无法恢复。