All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m49s
1.6 KiB
1.6 KiB
Context
step2 套餐使用 SQL 已从 tb_package 读取流量、名称及价格配置快照,但遗漏计时条款快照列;新记录因此使用表默认空值和零值,触发数据库完整性校验失败。
Goals / Non-Goals
Goals:
- 从 SQL 已连接的目标套餐行直接写入四个计时条款快照。
- 保持现有套餐选择、状态、优先级和冲突幂等键不变。
Non-Goals:
- 不修改套餐使用表、触发器或历史记录。
- 不推断或修正目标套餐自身的计时条款配置。
Decisions
- 在
INSERT列表和对应SELECT中加入p.expiry_base、p.calendar_type及按周期类型规范化后的时长快照:natural_month保留p.duration_months并写零天数,by_day保留p.duration_days并写零月数。这与正常下单的领域快照规则一致;目标套餐的非适用时长字段不进入使用记录快照。 - 不在 SQL 使用
COALESCE或常量兜底有效时长。目标套餐配置无效时应由数据库完整性约束拒绝,不能静默写入错误快照。
Risks / Trade-offs
- [目标套餐存在无效计时配置] → SQL 将被触发器拒绝;在正式执行前用隔离数据库检查生成 SQL,并修正目标套餐配置。
- [执行旧生成文件] → 仍会失败;必须重新生成并替换
step2_02_package_usages.sql。
Migration Plan
- 修改生成器并重新生成 step2 输出。
- 在隔离环境执行新的套餐使用 SQL,确认无快照触发器错误。
- 维护者在生产环境按事务执行新生成文件;失败时事务自动回滚,无需数据回滚。