返回顶部
d

database-migrations数据库迁移

Safe, zero-downtime database migration strategies — schema evolution, rollback planning, data migration, tooling, and anti-pattern avoidance for production systems. Use when planning schema changes, writing migrations, or reviewing migration safety.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
1,005
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

database-migrations

数据库迁移模式

模式演进策略

策略风险停机时间最佳适用场景
仅新增极低需要向后兼容保证的API
扩展-收缩
低 | 无 | 重命名、重构、类型变更 | | 并行变更 | 低 | 无 | 关键表上的高风险变更 | | 惰性迁移 | 中 | 无 | 批量迁移速度过慢的大表 | | 大爆炸 | 高 | 是 | 仅限开发/测试环境或小数据集 |

默认使用仅新增策略。 仅在必须修改或移除现有结构时,才升级到扩展-收缩策略。



零停机模式

每个生产环境的迁移都必须避免锁表或破坏正在运行的应用程序代码。

操作模式关键约束
添加列先设为可空切勿在大表上添加没有默认值的 NOT NULL 约束
重命名列
扩展-收缩 | 新增列 → 双写 → 回填 → 切换读取 → 删除旧列 |
| 删除列 | 先弃用 | 停止读取 → 停止写入 → 部署 → 删除 |
| 变更类型 | 并行列 | 添加新类型 → 双写 + 类型转换 → 切换 → 删除旧类型 |
| 添加索引 | 并发 | CREATE INDEX CONCURRENTLY — 不要包裹在事务中 |
| 拆分表 | 提取 + 外键 | 创建新表 → 回填 → 添加外键 → 更新查询 → 删除旧列 |
| 变更约束 | 两阶段 | 先添加 NOT VALID → 再单独执行 VALIDATE CONSTRAINT |
| 添加枚举值 | 仅追加 | 切勿删除或重命名现有值 |


迁移工具


工具生态系统风格核心优势
Prisma MigrateTypeScript/Node声明式(模式差异)ORM集成,影子数据库
Knex
JavaScript/Node | 命令式(上/下) | 轻量级,灵活 |
| Drizzle Kit | TypeScript/Node | 声明式(模式差异) | 类型安全,类SQL |
| Alembic | Python | 命令式(升级/降级) | 精细控制,自动生成 |
| Django Migrations | Python/Django | 声明式(模型差异) | 自动检测 |
| Flyway | JVM / CLI | SQL文件版本控制 | 简单,广泛数据库支持 |
| golang-migrate | Go / CLI | SQL(上/下文件) | 极简,可嵌入 |
| Atlas | Go / CLI | 声明式(HCL/SQL差异) | 模式即代码,代码检查,CI集成 |

根据你的ORM和部署流水线选择合适的工具。简单模式优先选择声明式,精细数据操作优先选择命令式。



回滚策略


方法何时使用
可逆(上 + 下)仅模式变更,早期阶段产品
仅向前(修正性迁移)
数据破坏性变更,大规模生产环境 |
| 混合 | 模式变更可逆,数据变更仅向前 |

数据保留

  1. 1. 软删除列 — 使用 deprecated 后缀重命名,而非直接删除
  2. 快照表 — CREATE TABLE backup<表名><日期> AS SELECT * FROM <表名>
  3. 时间点恢复 — 确保WAL归档覆盖迁移窗口期
  4. 逻辑备份 — 迁移前对受影响的表执行 pg_dump

蓝绿数据库

  1. 1. 复制主库 → 从库(绿色)
  2. 对绿色环境应用迁移
  3. 对绿色环境运行验证套件
  4. 将流量切换到绿色环境
  5. 保留蓝色环境作为回滚目标(N小时)
  6. 在确认窗口期过后停用蓝色环境

数据迁移模式

回填策略

策略最佳适用场景
内联回填小表(少于10万行)
批量回填
中等表(10万–1000万行) | | 后台任务 | 大表(超过1000万行) | | 惰性回填 | 不需要立即一致性的场景 |

批量处理

sql
DO $$
DECLARE
batch_size INT := 1000;
rows_updated INT;
BEGIN
LOOP
UPDATE my_table
SET newcol = computevalue(old_col)
WHERE id IN (
SELECT id FROM my_table
WHERE new_col IS NULL
LIMIT batch_size
FOR UPDATE SKIP LOCKED
);
GET DIAGNOSTICS rowsupdated = ROWCOUNT;
EXIT WHEN rows_updated = 0;
PERFORM pg_sleep(0.1); -- 节流以减少锁压力
COMMIT;
END LOOP;
END $$;

双写期

适用于扩展-收缩和并行变更:

  1. 1. 双写 — 应用程序同时写入旧列/表和新列/表
  2. 回填 — 用历史数据填充新结构
  3. 验证 — 断言一致性(行数、校验和)
  4. 切换 — 将读取切换到新结构,停止写入旧结构
  5. 清理 — 在冷却期后删除旧结构

测试迁移

使用类生产数据测试

  • - 切勿仅使用空数据或合成数据进行测试
  • 使用脱敏的生产快照
  • 匹配数据量 — 在1000行上能正常工作的迁移可能在1000万行上导致锁表
  • 复现边界情况:NULL值、空字符串、最大长度、Unicode

迁移CI流水线

yaml

  • - name: 测试迁移

steps:
- run: docker compose up -d db
- run: npm run migrate:up # 应用所有迁移
- run: npm run migrate:down # 回滚所有迁移
- run: npm run migrate:up # 重新应用(幂等性)
- run: npm run test:integration # 验证应用程序
- run: npm run migrate:status # 无待处理迁移

每个迁移PR必须通过:上 → 下 → 上 → 测试。



迁移检查清单

迁移前

  • - [ ] 已使用类生产数据量进行测试
  • [ ] 已编写并测试回滚方案
  • [ ] 已创建受影响表的备份
  • [ ] 应用程序代码兼容新旧两种模式
  • [ ] 已在预发布环境基准测试执行时间
  • [ ] 已分析锁影响
  • [ ] 已部署复制延迟监控

迁移期间

  • - [ ] 监控锁等待和活跃查询
  • [ ] 监控复制延迟
  • [ ] 关注错误率峰值
  • [ ] 准备好回滚命令

迁移后

  • - [ ] 模式与预期状态一致
  • [ ] 集成测试在迁移后的数据库上通过
  • [ ] 数据完整性已验证(行数、校验和)
  • [ ] ORM模式/类型定义已更新
  • [ ] 冷却期后已清理弃用结构
  • [ ] 迁移已在团队运行手册中记录

绝对禁止

  1. 1. 绝对不要 未经测试直接在生产环境运行迁移
  2. 绝对不要 在未移除所有应用程序引用并部署前删除列
  3. 绝对不要 在单个语句中为没有默认值的大表添加 NOT NULL 约束
  4. 绝对不要 在同一个迁移文件中混合模式DDL和数据变更
  5. 绝对不要 在在线系统中重命名列时跳过双写阶段
  6. 绝对不要 假设迁移是瞬间完成的 — 始终使用生产规模数据进行基准测试
  7. 绝对不要 为加速生产环境迁移而禁用外键检查
  8. 绝对不要 在迁移完成前部署依赖模式变更的应用程序代码

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 database-migrations-1776419995 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 database-migrations-1776419995 技能

通过命令行安装

skillhub install database-migrations-1776419995

下载

⬇ 下载 database-migrations v1.0.0(免费)

文件大小: 4.82 KB | 发布时间: 2026-4-17 19:44

v1.0.0 最新 2026-4-17 19:44
Initial release: Safe, zero-downtime strategies for database migrations in production systems.

- Covers schema evolution patterns, rollback planning, and anti-pattern avoidance.
- Includes actionable tables for zero-downtime operations, migration tools, and data migration batching.
- Provides detailed pre/during/post-migration checklists and CI examples.
- Emphasizes testing on production-like data and safety-first practices.
- "NEVER do" section warns against high-risk migration mistakes.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部