新版本上线加了两个非空字段,出问题回滚代码后旧代码写不进数据,报字段没有默认值。乍看像缓存或者权限的锅,追下去往往不是。
ALTER TABLE orders ADD COLUMN note varchar(255) DEFAULT ''; -- 回滚 ALTER TABLE orders DROP COLUMN note;
追下去是这么回事:回滚只处理了代码,数据库迁移脚本没有对应的向下版本,表结构仍然留在新版本的状态。
「回滚数据库结构」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。
监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
具体做法是,迁移脚本同时写 up 和 down;加字段先允许为空并给默认值;回滚前先确认新旧数据都兼容。
验收就看一点,回滚后旧代码能正常写入,接口不再报字段错误。
