跳到主要内容
哒哒星球DADA PLANET

Skill · 已公开版本

database-migrations · 把表结构改动拆成可审查的迁移

按扩展、回填、切换和收缩安排数据库变更,减少新旧应用同时运行时的兼容问题。

先看看示例

作者提供的示例,实际效果取决于你的输入和使用工具。

输入

编辑材料:PostgreSQL users表含id主键、username文本;应用A仍读写username,应用B将读display_name。不能在同一次发布里删除旧列,需保留回退到A的能力。

输出

编辑示例 · 未运行

阶段具体变更进入下一阶段的条件
扩展增加可空 display_name;保留 usernameA仍能正常读写,迁移锁影响经测试副本检查
兼容写入发布同时写两列、仍读 username 的应用两列写入失败能被发现并修复
回填与核对独立批次补历史 display_name空值与两列不一致记录有明确处理结果
切读B读取 display_name,继续双写业务验收通过,仍可切回A
收缩旧版本退出后另发迁移移除 username确认没有旧读写方并另行评审删除

当前不应直接执行 RENAME COLUMN:它会让仍引用 username 的A失去原字段。

方法说明

按扩展、回填、切换和收缩安排数据库变更,减少新旧应用同时运行时的兼容问题。

具体任务

规划一个字段替换迁移:依据现有表、代码读写和部署约束,拆分变更阶段并给出逐阶段退出条件。

审查大表索引或回填:识别事务、锁、批量大小和失败恢复要求,留下待验证的生产规模风险。

必需材料

当前表定义、数据规模和拟变更字段

数据库/迁移工具版本以及应用读写与部署顺序

可选材料

维护窗口与备份恢复方案

测试副本、慢查询或锁等待观测

使用门槛

能够阅读SQL和迁移历史,拥有可用于演练的独立数据库及相应维护知识。

这个 Skill 额外提供的方法

把表结构变化与数据回填分离,要求先保证旧代码仍能工作,再通过双写与一致性核对完成读路径切换。

编辑示例(未运行)

替换展示名字段时兼容旧代码

任务:评审 username 改 display_name 的发布方案

输入:
编辑材料:PostgreSQL users表含id主键、username文本;应用A仍读写username,应用B将读display_name。不能在同一次发布里删除旧列,需保留回退到A的能力。

结果片段:
| 阶段 | 具体变更 | 进入下一阶段的条件 |
|---|---|---|
| 扩展 | 增加可空 display_name;保留 username | A仍能正常读写,迁移锁影响经测试副本检查 |
| 兼容写入 | 发布同时写两列、仍读 username 的应用 | 两列写入失败能被发现并修复 |
| 回填与核对 | 独立批次补历史 display_name | 空值与两列不一致记录有明确处理结果 |
| 切读 | B读取 display_name,继续双写 | 业务验收通过,仍可切回A |
| 收缩 | 旧版本退出后另发迁移移除 username | 确认没有旧读写方并另行评审删除 |

当前不应直接执行 `RENAME COLUMN`:它会让仍引用 username 的A失去原字段。

这是编辑制定的迁移评审片段,未连接数据库、未执行DDL;阶段条件需在实际工具与数据量上验证。

首次任务

请使用已安装的 database-migrations Skill。
任务:规划一个字段替换迁移。
依据现有表、代码读写和部署约束,拆分变更阶段并给出逐阶段退出条件。

必需材料:
- 当前表定义、数据规模和拟变更字段:[填写或粘贴我的实际材料]
- 数据库/迁移工具版本以及应用读写与部署顺序:[填写或粘贴我的实际材料]

可选材料:
- 维护窗口与备份恢复方案:[有则补充;缺失时不要假定存在]
- 测试副本、慢查询或锁等待观测:[有则补充;缺失时不要假定存在]

处理边界:已部署迁移不原地改写;生产修复用新的前向迁移,不把down脚本当作无损恢复保证。;源命令含npx Prisma/Drizzle,须先核对并固定项目依赖;reset与push仅在明确隔离的开发环境评估,不直接套用于生产。。先指出影响任务的材料缺口;没有实际执行的操作和测试不要写成已完成。

请按以下标准交付可审阅结果:
1. 每个部署阶段都说明旧应用与新应用读写哪些字段。
2. 回填、DDL和删除分别有可核对的完成条件,失败恢复不依赖修改旧迁移。
3. 危险开发命令、事务限制和生产规模验证缺口被明确标出。

验收方法

每个部署阶段都说明旧应用与新应用读写哪些字段。

回填、DDL和删除分别有可核对的完成条件,失败恢复不依赖修改旧迁移。

危险开发命令、事务限制和生产规模验证缺口被明确标出。

依赖与准备

保留完整 database-migrations 目录;按项目选用 PostgreSQL、Prisma、Drizzle、Kysely、Django 或 golang-migrate 的既有版本与配置。源文件包含npx调用和破坏性开发命令,执行前固定工具版本、确认连接目标及权限,并保留可审查迁移与恢复材料。

使用边界

已部署迁移不原地改写;生产修复用新的前向迁移,不把down脚本当作无损恢复保证。

源命令含npx Prisma/Drizzle,须先核对并固定项目依赖;reset与push仅在明确隔离的开发环境评估,不直接套用于生产。

CONCURRENTLY不能放在普通事务块中;新增列等DDL仍可能取锁,源示例中的简化措辞不构成零停机保证。

本站示例由编辑撰写,未运行上游 Skill,不代表平台已完成工具兼容认证。

排错

并发建索引报事务块错误:检查迁移工具是否自动包事务,把该操作按工具支持的非事务方式单独编排。

切换后新列缺值或与旧列不一致:先保留双写和旧列,定位漏写窗口及回填覆盖范围,再决定是否切读。

固定来源

https://github.com/affaan-m/ECC/blob/c70874fae9eb0e5ad0365beb7e2955899fd1d30f/skills/database-migrations/SKILL.md

许可

MIT。许可原文:https://github.com/affaan-m/ECC/blob/c70874fae9eb0e5ad0365beb7e2955899fd1d30f/LICENSE

仓库热度

affaan-m/ECC 仓库 269,717 Stars(2026-09-30 核验);这是父仓库指标,不是单个 Skill 的评分。