SuperAPI AI 工具集

database-migrations

数据与分析

查看项目

更新于 10-16 05:53

技能介绍

用途:为生产系统提供安全、可回滚的数据库 Schema 变更方法。适用于创建或修改表、增删列与索引、执行数据迁移(回填、转换)以及规划零停机 Schema 变更。

核心原则:所有变更都通过迁移执行,禁止手工改生产库;生产迁移只向前推进,回滚通过新的前向迁移实现;Schema 迁移与数据迁移分离,不混用 DDL 与 DML;按生产规模数据测试;迁移一旦部署即不可变,需改则新建迁移。

安全检查清单:含 UP 与 DOWN(或标注不可逆);不对大表加全表锁;新列有默认值或可空;索引并发创建;数据回填与 Schema 变更分离;按生产规模测试;记录回滚方案。

PostgreSQL 模式示例:加列时用可空或带默认值的形式(Postgres 11+ 带默认值即时完成、不重写表),避免无默认值的 NOT NULL;建索引用 CREATE INDEX CONCURRENTLY 避免阻塞写入;重命名列走 expand-contract:先加新列,再单独迁移回填,随后部署同时读写两列的代码,最后在单独迁移中删除旧列。大批量数据迁移应分批并显示进度,借助 FOR UPDATE SKIP LOCKED 跳过已锁定行,而不是单事务全表更新。

零停机策略(expand-contract):扩展阶段添加新列或新表(可空或带默认值),应用同时写入新旧;迁移阶段应用改为读新、写双份,核对数据一致性;收缩阶段应用只用新结构,并在单独迁移中删除旧列或旧表。

反模式与更优做法:生产直接执行手工 SQL(应使用迁移文件);修改已部署的迁移(应新建迁移);无默认值的 NOT NULL(先加可空、回填后再加约束);大表内联建索引(用 CREATE INDEX CONCURRENTLY);Schema 与数据混在一个迁移(拆开);先删列再删代码(先删代码,下次部署再删列)。

限制:资料以 PostgreSQL 为主,其他数据库的等价写法、具体工具命令与安装方式暂未提供。