Database Migration Patterns 是一份关于数据库模式(schema)安全演进的实践指南,主题是用版本化、可回滚、经过测试的迁移来管理数据库结构变更。资料以 Alembic 为主要示例工具,同时涉及 SQL 迁移与数据迁移。
用途 该技能面向需要变更数据库结构的开发与运维场景,强调迁移应当可版本化、可回滚、可测试,并尽量做到零停机。它既给出具体命令与代码示例,也给出流程性的检查清单与反模式提醒。
主要能力
- Alembic 基础操作:初始化(alembic init alembic)、自动生成迁移(alembic revision --autogenerate -m "add skills table")、执行迁移(alembic upgrade head)、回滚一步(alembic downgrade -1),以及查看当前状态与历史(alembic current、alembic history)。
- 配置示例:在 alembic/env.py 中引入模型 Base 与配置 settings,设置 target_metadata,并给出异步引擎下 run_migrations_online 与 do_run_migrations 的写法。
- 迁移文件结构:展示包含 revision、down_revision、upgrade()、downgrade() 的迁移文件模板,示例中创建 skills 表、定义列与索引,并在 downgrade 中删除索引与表。
- 零停机迁移策略:
- 新增列:先加可空列,后续迁移再回填数据并加约束。
- 重命名列:分阶段进行,先加新列并复制数据,待应用改用新列后再删除旧列。
- 删除列:先停止写入(应用改动),再删除列。
- 新增索引:使用 CREATE INDEX CONCURRENTLY 实现零停机,downgrade 中删除索引。
- 数据迁移:示例用原生 SQL 批量回填 governance_phases 字段,并在 downgrade 中将其置空。
- 迁移测试:使用 pytest 与 alembic.config.Config、alembic.command,测试完整升级、完整降级、再升级到 head,以及迁移过程中的数据完整性。
- 迁移检查清单:分为创建前(零停机设计、定义 upgrade 与 downgrade、大表使用批处理/CONCURRENTLY)、部署前(在 staging 测试、测试回滚、备份数据、估算大表执行时间、应用兼容新旧模式)、部署后(迁移成功、应用正常、无性能回退、安排清理迁移)。
- 反模式:没有 downgrade、一步完成破坏性变更、混合模式迁移与数据迁移、在生产手工执行 SQL、只测试 upgrade、大表 ALTER 不使用 CONCURRENTLY。
使用方式 资料以命令与代码片段形式给出使用方式,包括 Alembic 命令行、env.py 配置、迁移文件模板、零停机迁移的 upgrade/downgrade 写法、数据迁移写法以及 pytest 测试写法。使用者可按这些示例在项目中落地。
适用场景 适用于使用 SQLAlchemy/Alembic 的 Python 项目,在需要安全变更数据库结构、进行数据回填、实现零停机发布或需要可回滚迁移流程时参考。
限制 资料未提供具体支持的数据库类型范围、版本要求、性能数据、收费或授权信息,也未提供除示例外的完整项目集成步骤;这些内容暂未提供。