Skip to main content

迁移文件列表

migrations/ 下的文件按文件名升序执行,当前编号已到 0032:

0015 新增的 5 个索引

全部使用 CREATE INDEX IF NOT EXISTS,可安全重复执行。

0016 ~ 0032 新增能力

新增迁移仍遵循「连续编号 + 幂等优先」;截至 v2.10.60 下一个编号为 0033。

执行方式

自动(推荐)

GitHub Actions 部署时自动按序执行所有迁移(在部署 Worker 之前)。

手动

CI 中还会附加 --config wrangler.workers.ci.toml(由工作流生成的临时部署配置,含真实 D1 id)。

幂等性(三层策略)

SQLite 没有 ADD COLUMN IF NOT EXISTS,而 0001_init.sql 新建库就已包含后续 ALTER 加的所有列,因此重复执行必然报 duplicate column。deploy.yml 用三层策略保证「可反复部署」:
  1. 记账表 schema_migrations:每次成功执行(或判定为已应用)的迁移写入 name(主键)+ applied_at;下次部署先查记账表,已应用的直接跳过。这一层覆盖了 0012、0014 这类删除类、非重跑语义安全的迁移。
  2. 列预检:ALTER 加列类迁移(0003 cover、0004 category、0005 status、0010 must_change、0011 parent_id)在执行前先用 pragma_table_info 查目标列是否已存在,存在则记账跳过。
  3. 兜底:偶发执行失败时,若报错含 duplicate column / already has a column / already exists 等字样,按「已应用」记账跳过;其余错误完整打印并中断部署,避免半套 schema 上线。
schema_migrations 表本身由 CI 创建(CREATE TABLE IF NOT EXISTS),不在 migrations/ 目录里,因此不会出现在上面的文件列表中。结构见表结构。
0001_init.sql 是全量表结构(posts 含 cover / category / status 等全部字段);0003 / 0004 / 0005 / 0010 / 0011 仅对早期存量库有意义。

添加新迁移

  1. 在 migrations/ 下创建新文件,编号递增(当前下一个编号是 0033)
  2. 新建表使用 CREATE TABLE IF NOT EXISTS、索引使用 CREATE INDEX IF NOT EXISTS 以确保幂等
  3. ALTER TABLE ... ADD COLUMN 无法幂等:需同步更新 deploy.yml 的列预检 case 分支(表名 + 列名)
  4. 删除类迁移(DELETE)天然幂等,可随每次部署重复执行,但仍会被记账表跳过
从旧版 KV 存储升级到 D1 的完整流程见KV 迁移到 D1。