SuperAPI AI 工具集

Backend Migration Standards

编程与开发

查看项目

更新于 10-16 00:30

技能介绍

用途:在创建或修改数据库迁移时提供规范指导,覆盖新增/删除/修改表与列、编写回滚方法、创建索引、数据迁移、零停机部署规划、命名约定以及审查既有迁移等场景。

主要能力与原则:

  1. 强制可回滚:每个迁移必须有可用的 down 方法,写完 up 后立即测试 down;无法安全回滚的变更需注释说明并考虑多步方案。
  2. 单一逻辑变更:每个迁移只做一件事,便于调试、回滚与评审。
  3. 已部署迁移不可修改:一旦在共享环境运行即视为不可变,需新建迁移修复。
  4. 命名约定:使用时间戳加描述性名称,如 20241118120000_add_email_to_users.py,名称应直接说明变更内容。
  5. 文件组织:schema 变更放 migrations/schema/,数据迁移放 migrations/data/,二者分离。

Schema 变更:为已有表的 NOT NULL 列指定默认值以避免锁表;删除列采用多步零停机方案(先停用代码再删列);重命名列按新增+删除处理。

索引管理:大表使用并发创建索引,如 PostgreSQL 的 postgresql_concurrently=True、MySQL 的 mysql_algorithm='INPLACE', mysql_lock='NONE';命名采用 idx_<table>_<column(s)>;外键列、WHERE、ORDER BY、JOIN 涉及的列应建索引。

数据迁移:与 schema 变更分离;大批量数据分批处理;保证幂等,如使用 ON CONFLICT DO NOTHING。

零停机部署:新迁移需与当前部署代码向后兼容,先部署迁移再部署新代码;类型或约束变更采用先加新列、双写、回填、切换读取、再删旧列的顺序;外键约束在数据一致后单独迁移添加。

测试:提交前依次执行 up、检查结构、执行 down、验证回滚、再次 up 验证可重复;建议用脱敏生产数据测试。

框架示例涵盖 Alembic(Python)、Rails(Ruby)、Sequelize(JavaScript)的 up/down 写法。

限制与警示:禁止修改已部署迁移、无计划删列、无 down 方法、混合 schema 与数据变更、对大表加无默认值的 NOT NULL 列、在生产表上非并发建索引。提交前需核对清单。具体命令如 rake db:migrate、rake db:rollback 保持原样。