迁移文件列表
migrations/ 下的文件按文件名升序执行,当前编号已到 0032:
0015 新增的 5 个索引
全部使用
CREATE INDEX IF NOT EXISTS,可安全重复执行。
0016 ~ 0032 新增能力
新增迁移仍遵循「连续编号 + 幂等优先」;截至 v2.10.60 下一个编号为
0033。
执行方式
自动(推荐)
GitHub Actions 部署时自动按序执行所有迁移(在部署 Worker 之前)。手动
--config wrangler.workers.ci.toml(由工作流生成的临时部署配置,含真实 D1 id)。
幂等性(三层策略)
SQLite 没有ADD COLUMN IF NOT EXISTS,而 0001_init.sql 新建库就已包含后续 ALTER 加的所有列,因此重复执行必然报 duplicate column。deploy.yml 用三层策略保证「可反复部署」:
- 记账表
schema_migrations:每次成功执行(或判定为已应用)的迁移写入name(主键)+applied_at;下次部署先查记账表,已应用的直接跳过。这一层覆盖了0012、0014这类删除类、非重跑语义安全的迁移。 - 列预检:ALTER 加列类迁移(
0003cover、0004category、0005status、0010must_change、0011parent_id)在执行前先用pragma_table_info查目标列是否已存在,存在则记账跳过。 - 兜底:偶发执行失败时,若报错含
duplicate column/already has a column/already exists等字样,按「已应用」记账跳过;其余错误完整打印并中断部署,避免半套 schema 上线。
schema_migrations 表本身由 CI 创建(CREATE TABLE IF NOT EXISTS),不在 migrations/ 目录里,因此不会出现在上面的文件列表中。结构见表结构。添加新迁移
- 在
migrations/下创建新文件,编号递增(当前下一个编号是0033) - 新建表使用
CREATE TABLE IF NOT EXISTS、索引使用CREATE INDEX IF NOT EXISTS以确保幂等 ALTER TABLE ... ADD COLUMN无法幂等:需同步更新deploy.yml的列预检case分支(表名 + 列名)- 删除类迁移(
DELETE)天然幂等,可随每次部署重复执行,但仍会被记账表跳过
从旧版 KV 存储升级到 D1 的完整流程见KV 迁移到 D1。
