关于 migrate
migrate 是默认只读的数据库迁移安全技能,可分析现有或生成的迁移。它评估锁、表重写、可逆性和数据丢失风险;破坏性变更写入前,必须由委托 Agent 执行并通过精确对象名称确认。
主要功能
- 01检查现有迁移文件
- 02生成并分类架构差异
- 03评估锁、重写和可逆性
- 04识别破坏性及数据丢失步骤
- 05提出扩展—收缩发布步骤
- 06破坏性写入需确认对象名称
适用场景
- 01应用迁移前进行审查
- 02比较两个架构路径并检查生成的变更
- 03为高风险架构变更规划更安全的发布流程
- 04防止意外执行破坏性迁移
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ hainrixz/ claude-db --skill migrate安装后在 Claude Code 中输入/migrate确认已加载。
详细介绍
/claude-db:migrate
迁移安全 lint,由模块 db-migration-safety (M22, axis performance) 通过 db-migration-safety / MSA 检查负责。默认模式为只读:它会分析并说明,但不会运行迁移。
$ARGUMENTS 有两种形式:
- 单文件 lint —
<migration-file|migration-dir> [flags]:解析并分类现有迁移(见下文)。 - diff 模式 —
<from-schema> <to-schema> [flags]:两个 schema 路径。运行node scripts/schema-diff.mjs --from <from-schema> --to <to-schema>生成 up/down 迁移,然后按照单文件模式中的相同方式分类生成的迁移。
如果没有提供参数,请询问参数(或指出项目的迁移目录)。
Diff 模式(<from-schema> <to-schema>)
- 运行
node scripts/schema-diff.mjs --from <A> --to <B>生成 up 和 down 迁移;schema-diff.mjs会标记破坏性步骤。 - 向用户展示生成的 up/down 迁移,并以通俗语言概述每个步骤。
- 在写入任何内容前,先按下文的数据丢失握手流程处理
schema-diff.mjs标记为破坏性的每个步骤(DROP TABLE/COLUMN、类型收窄)。 - 然后按照单文件模式中相同的锁、重写和可逆性分析,对生成的迁移进行分类。
操作步骤(单文件 lint)
- 解析迁移(原始 SQL 或生成的 ORM 迁移)。检测数据库引擎;加载对应引擎的锁和重写规则。
- 对每条语句进行分类:
- 锁级别 — 例如,Postgres
ACCESS EXCLUSIVE(阻止读写)与SHARE UPDATE EXCLUSIVE;以及它是否会在整个操作期间锁住表。 - 表重写 — 此更改是否会重写每一行(例如,在旧版引擎上添加带有易变默认值的
NOT NULL列,或更改列类型)?重写成本会随表大小增加。 - 可逆性 — 是否有干净的 down 迁移,还是只能单向执行(数据已被删除或强制转换)?
- 破坏性 / 数据丢失 —
DROP COLUMN/TABLE、TRUNCATE、类型收窄、枚举值移除、不可逆的强制转换。
- 锁级别 — 例如,Postgres
- 按照
schema/finding.schema.json输出发现项(status/severity/引用违规语句并对机密信息脱敏的evidence.observed/verification.reproduce/expected_impact.axis=performance+置信度+影响程度)。不可逆且没有 expand-contract 的破坏性迁移,严重性为 5(限制 Performance 上限)。绝不编造行数或锁定时长——影响程度按高|中|低分级,并根据描述的表大小评估,不得凭空捏造。 - 为存在风险的更改提出 expand-contract 部署方案:expand(添加新的可空列 / 新表 / 双写)、migrate(分批在线回填)、contract(切换约束、删除旧结构)——每一步单独执行且各自可逆,并注明每一步的锁级别。
安全 / 握手流程
- 此命令绝不会自行应用迁移。
--apply仅表示请求应用。 - 任何被归类为数据丢失 / 破坏性的步骤都必须进行明确的令牌握手:展示确切语句和不可逆后果,然后要求用户逐字输入受影响对象的名称——不能只回答是或否。例如,要确认
DROP TABLE orders,用户必须输入orders;要删除email列,用户必须输入email。如果回复与对象名称不完全匹配,则中止该步骤。握手规则见references/migration-safety.md。 - 实际写入只能委托给 db-migration-writer 子 Agent(唯一拥有 Write/Edit 权限的 Agent),且必须在握手完成后进行。默认只读。
评论
支持 Markdown