入门
迁移与种子
数据库结构(schema)用 Drizzle 定义,通过 D1 迁移应用到 数据库。这一页讲日常会用到的几条命令,以及背后的取舍。
常用命令
改完 schema(在 src/db/ 里)后:
- 生成迁移 SQL —— Drizzle 对比 schema 变化,生成一份
.sql到drizzle/:pnpm db:generate - 应用到本地库:
应用到远程(生产)库 —— 指向pnpm db:migrate:localflarestarter-db-prod并带--env production: (staging 环境用pnpm db:migrate:prodpnpm db:migrate:staging。) - 写入种子数据(仅本地) —— 执行
scripts/seed.sql:pnpm db:seed:local - 重置本地库(开发态回滚) —— 删本地库 → 重新迁移 → 重新种子:
pnpm db:reset:local
新增一张表时,除了改 schema,记得把它注册进 src/db/schema.ts(barrel 文件),再跑
db:generate。
为什么种子放 scripts/ 而不是 drizzle/
drizzle/ 是 migrations_dir —— 里面的 .sql 会被 wrangler d1 migrations apply
当作迁移在远程执行。种子是开发用的假数据,必须放在 migrations_dir 之外
(scripts/seed.sql),用 wrangler d1 execute --file 单独跑,才不会污染生产库。
回滚策略
D1 没有原生的 down(向下)迁移,不能一键回退。
- 本地/开发:直接用
db:reset:local重置。 - 生产:采用「前向修复」—— 写一条新迁移去撤销上一条的变更(要破坏性删列时, 先双写 / 灰度过渡)。因此 schema 应尽早稳定。(完整的迁移工具包是商业版核心,见架构蓝图。)