浏览 AI 使用教程
操作教程

Codex迁移数据计划:用三条文章记录做字段映射与试迁

展示旧字段到新字段的转换、重复slug的明确处理、隔离试迁和逐ID对账;计划示例不代替真实数据库迁移或恢复演练。

Codex项目开发与自动化工作流主视觉
本文目录 · 跳到当前步骤

迁移计划应先回答同一条记录会变成什么。总数相同却把标题放错行,仍然是错误迁移。

源数据和目标约束

把以下教学数据保存为 old.json。目标要求 id 保持、slug 唯一、state 只能是 draft 或 published。练习仅输出文件,不连接数据库。

json
[
  {"old_id":11,"path":"/start/","heading":"开始使用","live":true},
  {"old_id":12,"path":"/fees/","heading":"收费说明","live":false},
  {"old_id":13,"path":"/start/","heading":"旧版开始","live":false}
]

写出转换和冲突决定

目标字段 来源与规则 例子
id old_id,保持整数且唯一 11 → 11
slug path 去两端斜线;转换后再查重 /fees/ → fees
title heading 原样保留 收费说明 → 收费说明
state live=true为published,false为draft;其他值报错 false → draft

11和13都会得到 start。首轮计划必须列冲突并停止生成可导入成品,不可自动丢弃13或加随机后缀。教学中的后续明确决定是:“保留两条,13改为start-legacy并保持draft;旧URL是否重定向另作决定。”这项决定写入 decisions.md 才进入试迁。

同一组记录的预期试迁结果

json
[
  {"id":11,"slug":"start","title":"开始使用","state":"published"},
  {"id":12,"slug":"fees","title":"收费说明","state":"draft"},
  {"id":13,"slug":"start-legacy","title":"旧版开始","state":"draft"}
]

可给 Codex:“读取old.json与decisions.md,只在output/new.json写候选结果;输出逐ID对照表,检查3个ID各出现一次、slug唯一、标题逐字相等、published为1条、draft为2条。未定义的类型或冲突必须报错。”

把第13条 live 改为字符串“false”再试一次,预期应报类型问题,不应按真值转换为published。这个反例可以发现只写布尔判断、没有验证输入类型的转换。

文件试迁之后还有什么

此处没有真实数据库、并发写入或外键,因此不能宣布生产迁移成功。正式计划还需固定源快照时间、处理增量写入,记录目标约束和实际备份恢复演练。若目标写入失败,不依据“已读3条”判断成功,必须按目标实际持久化的ID和内容对账。

下一步

继续阅读与你当前问题相关的教程: