关于 drizzle-safe-migrations
drizzle-safe-migrations 是供团队安全执行 Drizzle 数据库迁移的技能,侧重可审计性与部署安全。它指导团队按顺序生成和验证结构及数据变更,并规划上线步骤。
主要功能
- 01区分仅结构变更与结构加数据变更
- 02为数据回填创建自定义迁移
- 03不手动修改生成的结构迁移
- 04检查 Drizzle 日志中的迁移顺序
- 05验证现有数据与全新安装场景
- 06记录上线风险与恢复步骤
适用场景
- 01在收紧约束前回填数据
- 02检查迁移顺序与生成的 SQL
- 03规划结构变更的安全部署
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pedronauck/ skills --skill drizzle-safe-migrations安装后在 Claude Code 中输入/drizzle-safe-migrations确认已加载。
附带文件agents/openai.yamlreferences/production-playbook.md
详细介绍
Drizzle 安全迁移
概述
使用此技能以可审计、适合安全部署且符合 Drizzle 迁移模型的方式运行数据库迁移。
核心规则
- 使用项目现有的脚本和包管理器生成架构迁移;下面的
bun run db:generate只是示例,并非必需的脚本名称。 - 切勿手动编辑生成的架构迁移文件。
- 将数据回填生成为自定义迁移(
bun run db:generate -- --custom --name <name>),并且只编辑该自定义 SQL 文件。 - 在收紧约束之前,先进行数据规范化。
- 将一次性数据修复保留在迁移历史中,不要将其隐藏在运行时逻辑中,除非紧急热修复需要临时缓解措施。
工作流
- 对变更进行分类:
schema-only:仅涉及列、表、索引或默认值变更。data+schema:必须先转换旧数据,再应用新约束或默认值。
- 对于
data+schema,先创建自定义迁移:bun run db:generate -- --custom --name <descriptive_name>- 添加幂等的回填 SQL。
- 接着生成架构迁移:
bun run db:generate
- 在
drizzle/meta/_journal.json中验证迁移顺序:- 回填迁移的索引必须小于收紧约束的迁移索引。
- 验证生成的 SQL 和快照:
- 回填迁移只包含预期的数据变更。
- 架构迁移包含约束、默认值或类型变更。
- 针对现有数据和全新安装的情况运行负责该变更的迁移测试套件,并通过项目要求的检查。复用现有证据;无关的后端测试套件不属于额外的技能门槛。
- 在适用时记录重要的发布风险和恢复步骤:
- 预期的数据转换;
- 有锁风险的区域;
- 回滚策略。
回填要求
- 使用限制严格的
WHERE子句。 - 优先使用幂等更新(
UPDATE ... WHERE status = 'legacy_value')。 - 不要在同一个迁移中混合无关的 DDL/DML。
- 保持 SQL 明确且精简。
收紧约束的模式
移除允许的值(枚举/检查约束)时:
- 将现有行回填为有效的目标值。
- 将默认值更新为新值。
- 收紧检查/枚举约束。
对于大型表或严格的正常运行时间目标,请评估实际数据库和驱动支持的分阶段约束验证方式。PostgreSQL 的 NOT VALID / VALIDATE CONSTRAINT 仅适用于受支持的约束类型。
反模式
- 手动编辑生成的架构迁移文件。
- 在回填现有数据之前收紧约束。
- 不生成迁移文件,却将一次性迁移逻辑隐藏在应用启动代码中。
- 运行迁移时未验证 Drizzle 日志中的顺序。
参考
- 命令模板和审查清单请参阅
references/production-playbook.md。
评论
支持 Markdown