生产数据库曾在 #141 开发中间状态执行并记录 schema v8,当时 shopee_skus.field_sources、field_observed_at 尚未加入;最新代码看到版本号已是 v8 或 v9便跳过 v8,最终全局自检报“蝦皮 SKU 字段 field_sources 缺失”,Admin 无法启动。v9 可能已在最终自检失败前记录,因此重启不能自愈。
shopee_skus.field_sources
field_observed_at
复现:数据库 schema_migrations 已有 v8/v9,但删除或缺少上述任一 v8 字段;启动最新 Admin,迁移最终自检失败。
schema_migrations
mysqlSchemaVersion
migrateMySQLV10
information_schema
field_sources/field_observed_at
field_sources
schema_migrations.version=10
从 admin/ 执行固定 Go 1.23 全量 build/test/vet;在 MySQL 8.4 _test 库构造已记录 v9、缺失 v8 来源字段的状态,执行首次修复和重复迁移,核对版本、列、索引、数据和约束。
admin/
_test
该修复会执行追加 DDL 和数据回填,发布前必须备份并在 _test 演练。回退应用时保留 v10 新增列和迁移记录,不删除已补齐字段;旧代码会忽略新增字段。
实际启动继续发现 chk_shopee_products_image_manual 缺失,说明同一数据库的 v9 也在开发中间状态提前记录。v10 方案调整为依次幂等重放 v8、v9,再执行两版完整形状自检;新增已记录 v9 但缺少 v9 约束的回归状态。该调整不扩大业务范围,仍不删除数据或改写历史版本。
实现完成,状态更新为待验收。
验证:Go 1.23 build/test/vet 通过;新增 MySQL 8 集成用例已编译,但当前未启用专用 _test 库,因此未在生产库运行。
提交:fef97cf、edb835a。重启 Admin 时会自动执行 v10 修复。
11:28 启动错误已修正:v10 现会同时幂等重放 v8 和 v9,自动补齐缺失的 chk_shopee_products_image_manual、chk_shopee_products_shop_manual 等 v9 结构,再进行完整自检。
Go 1.23 build/test/vet 通过。提交:9671202、eb5494c。请重新启动 run_admin.bat 验证生产库自动收敛。
用户于 2026-08-12 明确验收通过。已确认本地归档 docs/task/144-修复商品目录迁移.md 存在,现关闭工单。
docs/task/144-修复商品目录迁移.md
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
生产数据库曾在 #141 开发中间状态执行并记录 schema v8,当时
shopee_skus.field_sources、field_observed_at尚未加入;最新代码看到版本号已是 v8 或 v9便跳过 v8,最终全局自检报“蝦皮 SKU 字段 field_sources 缺失”,Admin 无法启动。v9 可能已在最终自检失败前记录,因此重启不能自愈。复现:数据库
schema_migrations已有 v8/v9,但删除或缺少上述任一 v8 字段;启动最新 Admin,迁移最终自检失败。做什么 / 不做什么
怎么做
mysqlSchemaVersion提升至 10,新增migrateMySQLV10,只调用冻结且可重放的 v8 修复逻辑补齐缺失列、规格键回填、字段来源回填和唯一索引,再执行 v8、v9 形状自检。information_schema;已有字段和索引不重复创建,兼容 MySQL DDL 隐式提交后的再次启动。field_sources/field_observed_at的真实状态,验证 v10 收敛、只记录一次并保留商品/SKU 数据;增加中断重跑测试。验收标准
field_sources缺失。field_sources、field_observed_at按既有非空字段安全回填来源和时间。schema_migrations.version=10只记录一次。怎么验证
从
admin/执行固定 Go 1.23 全量 build/test/vet;在 MySQL 8.4_test库构造已记录 v9、缺失 v8 来源字段的状态,执行首次修复和重复迁移,核对版本、列、索引、数据和约束。风险和回退
该修复会执行追加 DDL 和数据回填,发布前必须备份并在
_test演练。回退应用时保留 v10 新增列和迁移记录,不删除已补齐字段;旧代码会忽略新增字段。实施记录
二次修正(2026-08-11 11:28)
实际启动继续发现 chk_shopee_products_image_manual 缺失,说明同一数据库的 v9 也在开发中间状态提前记录。v10 方案调整为依次幂等重放 v8、v9,再执行两版完整形状自检;新增已记录 v9 但缺少 v9 约束的回归状态。该调整不扩大业务范围,仍不删除数据或改写历史版本。
实现完成,状态更新为待验收。
验证:Go 1.23 build/test/vet 通过;新增 MySQL 8 集成用例已编译,但当前未启用专用 _test 库,因此未在生产库运行。
提交:fef97cf、edb835a。重启 Admin 时会自动执行 v10 修复。
11:28 启动错误已修正:v10 现会同时幂等重放 v8 和 v9,自动补齐缺失的 chk_shopee_products_image_manual、chk_shopee_products_shop_manual 等 v9 结构,再进行完整自检。
Go 1.23 build/test/vet 通过。提交:9671202、eb5494c。请重新启动 run_admin.bat 验证生产库自动收敛。
用户于 2026-08-12 明确验收通过。已确认本地归档
docs/task/144-修复商品目录迁移.md存在,现关闭工单。