SuperAPI AI 工具集

migration

部署与运维

查看项目

更新于 10-15 23:47

技能介绍

用途:指导在该仓库中安全地变更数据库 schema。权威详细手册位于 packages/db/MIGRATIONS.md,本技能只是简短的安全包装,若有冲突以该文件和当前 package.json 脚本为准。

主要能力与模型:引擎为 node-pg-migrate,由 packages/db/scripts/migrate.ts 调用;schema 来源为 packages/db/src/schema/kortix.ts 的 Drizzle 模型;迁移文件是 packages/db/migrations/ 下不可变的 SQL 文件,命名采用 17 位 UTC 时间戳(YYYYMMDDHHMMSSmmm_slug.sql);已应用状态记录在 kortix_migrations.pgmigrations,node-pg-migrate 只跟踪迁移名,不校验文件内容。部署时 deploy-dev.yml 与 deploy-prod.yml 会在 EKS GitOps 发布前运行 pnpm --filter @kortix/db migrate,被禁用的 Helm PreSync 钩子不是实际迁移路径。

规则:已应用的迁移绝不修改,只能新增;禁止使用 drizzle-kit push 或在迁移流程外手工执行生产 DDL;生成的 SQL 在进入共享库前必须逐行审查;破坏性或兼容性敏感变更优先采用 expand/contract;删除或修改约束、唯一索引、列、枚举值的迁移需带 -- mixed-version-safe: <...> 注解(ADD VALUE 用 -- enum-value-checked: <...>),否则 CI 失败;在已有表上增删索引须用 pnpm migrate:create <slug> --concurrent,不要用普通 CREATE INDEX。生产为在线环境,任何手工生产迁移操作前须展示确切 SQL 并获得明确许可。

常用命令(仓库根目录):pnpm migrate 应用待执行迁移;pnpm migrate:status 列出待执行迁移,有待执行时以非零码退出;pnpm migrate:create <slug> 生成手写 SQL 迁移模板;加 --concurrent 生成 .concurrent.ts 逃生通道;pnpm migrate:generate <slug> 从 kortix.ts 变更生成 SQL 并更新 Drizzle 快照;pnpm migrate:fake 将待执行迁移标记为已应用(用于基线化已有环境);pnpm --filter @kortix/db lint 执行完整本地检查(文件名/顺序规则、混合版本/枚举值守卫、squawk 零停机 linter);pnpm migrate:lint 仅做文件名/顺序/混合版本/枚举值检查。

安全变更流程:修改 schema 或创建手写/并发迁移,运行生成或创建命令,通读 SQL,发现意外 DROP、不安全类型变更、对已有数据表立即 NOT NULL、非幂等回填或缺少注解时停止,运行 lint 与相关测试,非平凡变更先应用到本地或临时库,提交迁移 SQL 与生成的 Drizzle 快照。完整基线、预览/生产行为、自托管命令与故障演练见 packages/db/MIGRATIONS.md。限制:资料未提供具体数据库版本、回滚策略细节及自托管命令内容。