Open Agents 数据库迁移管理:Drizzle Kit 与部署自动迁移完整指南
【免费下载链接】open-agentsAn open source template for building cloud agents.项目地址: https://gitcode.com/GitHub_Trending/op/open-agents
Open Agents 迁移方案一句话看懂
Open Agents 是一个开源的云代码 Agent 模板项目,内置了基于Drizzle Kit的数据库迁移管理和部署时自动迁移机制。它用 schema.ts 描述表结构,用 drizzle.config.ts 生成 SQL 迁移文件,再在构建阶段自动执行迁移——开发者只需改一个文件,剩下的交给流水线。🚀
核心概念:Schema、迁移文件与 Journal 三件套
Open Agents 的数据库层由三部分协作完成:
| 文件 | 作用 |
|---|---|
| lib/db/schema.ts | 用 Drizzle ORM 声明式定义所有表结构(users、accounts、sessions 等) |
| lib/db/migrations/ | Drizzle Kit 生成的 SQL 迁移文件,每个文件是一次版本化的结构变更 |
| meta/_journal.json | 迁移日志,记录每条迁移的序号、时间戳与标签,保证执行顺序 |
以最新的迁移文件为例,内容就是纯 SQL:
0036_faulty_yellow_claw.sql:
ALTER TABLE "sessions" ADD COLUMN IF NOT EXISTS "sandbox_provisioning_run_id" text;
迁移目录里已沉淀了 30 多条历史迁移(从0000到0036),项目演进过程中每一次表结构变更都以独立文件形式留档,可追溯、可重放。
本地开发:Drizzle Kit 四大常用命令
所有数据库操作命令都配置在 apps/web/package.json 的 scripts 中,用 Bun 即可一键执行:
# 生成迁移文件(schema 变更后执行) bun run db:generate # 将 schema 直接同步到本地数据库(开发期快速调试) bun run db:push # 执行 SQL 迁移文件 bun run db:migrate # 图形化查看数据库(Drizzle Studio) bun run db:studio推荐的日常开发流:修改schema.ts→db:generate生成迁移 → 提交.sql文件。db:push仅用于本地快速试错,不应产生迁移文件。
配置侧只需三行关键设置(见 drizzle.config.ts):
export default defineConfig({ schema: "./lib/db/schema.ts", // 声明式结构定义 out: "./lib/db/migrations", // SQL 迁移输出目录 dialect: "postgresql", });部署自动迁移:构建即迁移
这是 Open Agents 最贴心的设计——package.json 中的 build 脚本被改成了:
"build": "bun run db:migrate:apply && next build"也就是说,每次部署构建前都会先运行 lib/db/migrate.ts,由它调用drizzle-orm的migrate()把 migrations/ 下的 SQL 按序应用到POSTGRES_URL指向的数据库。上线新表结构不再需要手动执行任何脚本。✅
migrate.ts还内置了两层健壮性保护,值得新手学习:
- 缺配置即跳过:若未设置
POSTGRES_URL,打印提示后直接退出,不会让部署失败; - 旧库自动对账:检测到数据库已有表结构但没有迁移历史时,会逐条重放迁移 SQL,并把"表已存在"这类可忽略的 PostgreSQL 错误码(如
42P07重复表、42701重复列)自动跳过,实现平滑接管旧库。
迁移状态记录在drizzle.__drizzle_migrations表中,每条迁移以 hash + 时间戳去重,重复部署不会重复执行。
防漂移检查:确保迁移文件与 Schema 同步
改了schema.ts却忘了生成迁移?scripts/check-migrations.ts 帮你兜底:
bun run db:check它先快照现有.sql文件,再运行drizzle-kit generate,若发现有新生成的迁移文件,立即报错并提示你提交:
❌ Schema has drifted from migrations. 请运行
db:generate并提交结果。
建议在 CI 中挂上这一步,让"漏提交迁移文件"这类事故在合并前就被拦下。
新手上手清单
- 配置连接:在
.env.local中设置POSTGRES_URL(配置加载逻辑见 drizzle.config.ts); - 首次建库:本地执行
bun run db:migrate,全部迁移会按 journal 顺序执行; - 日常迭代:改 schema.ts →
db:generate→ 提交生成的.sql; - 上线:无需任何手动操作,构建阶段的自动迁移会接管一切;
- 保险丝:定期运行
db:check,防止 schema 与迁移漂移。
整套方案的核心思想就一句话:结构定义、迁移 SQL、执行日志三者分离,开发靠 Drizzle Kit,上线靠构建钩子。对新手而言,你只需要关心schema.ts这一个文件。✨
【免费下载链接】open-agentsAn open source template for building cloud agents.项目地址: https://gitcode.com/GitHub_Trending/op/open-agents
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考