db-migrations 是 superset-sh/superset 仓库中用于指导数据库迁移的 AI 技能文档。它针对使用 Drizzle 和 Neon 的开发流程,强调正确迁移在空旷数据库上也可能拖垮生产,并给出生成、检查与排练迁移的具体步骤。
用途:该技能用于在修改 packages/db/src/schema/ 中的 schema 时,生成安全的数据库迁移,并在合并前通过安全检查清单确认其可安全地对生产数据库运行。
主要能力:
- 生成迁移:在根 .env 中配置 NEON_ORG_ID 和 NEON_PROJECT_ID,创建新的 Neon 分支并指向该分支,然后修改 schema,并在 packages/db 下运行 bunx drizzle-kit generate --name="<sample_name_snake_case>"。生成的迁移只应用到开发分支,禁止直接对共享或生产数据库应用。禁止在未经用户明确确认的情况下手工编辑 packages/db/drizzle/ 下的文件,唯一例外是调整语句顺序(规则3)。
- 安全检查清单:包括检查生产表大小、避免在大表上变更列类型、按子表先于父表的顺序加锁、避免热表上长时间 ACCESS EXCLUSIVE 锁、每条语句在 60 秒内完成、在必要情况下在 Neon 生产分支上加载排练、读路径变更需同版本迁移数据、同一 PR 不包含 tRPC 输入输出变更、修改已推送迁移后删除预览分支等。
- 生产规模检查:提供只读 SQL 查询表总大小与近似行数,并给出示例表大小。
- 关键规则:所有待执行迁移在一个事务中运行;禁止在大而繁忙的表上做非二进制兼容的列类型变更;锁顺序要与应用一致(先子表后父表),需要时经用户确认后手工调整 drizzle-kit 生成的语句顺序并注释原因;识别热表并避免长时间锁,必要时先等待作业的 advisory lock;读路径变更必须同版本回填数据。
- 负载排练:在 Neon 生产子分支上,使用 pgbench 模拟读父表与写子表,同时以 PGOPTIONS="-c lock_timeout=5s -c statement_timeout=60s" bun drizzle-kit migrate 应用迁移,重复多次以验证稳定性。
- 生产部署机制:deploy-database 作业使用并发组避免重叠,设置 lock_timeout=5s 和 statement_timeout=60s,最多重试8次且仅对死锁或锁超时重试,最后通过 verify-migrations-applied.ts 校验最新迁移已记录。
使用方式:按文档步骤在 Neon 分支上生成迁移,对照安全检查清单逐项确认,必要时进行负载排练,然后提交 PR。
适用场景:修改数据库 schema、新增或调整表与列、需要评估迁移对生产影响时。
限制:该技能依赖 Neon 和 Drizzle 工具链;需要访问 Neon 分支与生产只读查询;手工编辑迁移文件需用户确认;不能在迁移中执行超过60秒的语句;CI 无法捕获读路径切换未回填的问题,需人工确保同版本回填。文档中未提供具体价格、平台支持范围或效果保证。