检查数据库迁移的安全性——检测数据丢失风险、锁定操作、向后兼容性问题以及跨SQL部署顺序问题...
迁移安全检查器是一项面向实际任务的技能,主要用于检查数据库迁移数据丢失风险、 表格锁定操作、 后向兼容问题 和部署命令问题。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
检查数据库迁移是否存在数据丢失风险、表级锁操作、向后兼容性问题以及部署顺序问题。支持原生 SQL 迁移、各类 ORM(Prisma、Drizzle、Django、Rails、Sequelize、TypeORM)以及迁移工具(Flyway、Liquibase、golang-migrate)。
"检查此迁移是否安全" "该迁移是否会锁定 users 表?" "该迁移是否向后兼容?" "在部署前审查待处理的迁移"
find . -path "*/migrations/*.sql" -o -path "*/migrations/*.py" -o -path "*/migrate/*.sql" 2>/dev/null | head -20 ls prisma/migrations/*/migration.sql 2>/dev/null find . -path "*/migrations/0*.py" 2>/dev/null | tail -10 ls db/migrate/*.rb 2>/dev/null | tail -10
数据丢失风险:
DROP TABLE / DROP COLUMN — 不可逆的数据删除TRUNCATE TABLE — 清空全部行锁表操作(针对大表):
ALTER TABLE ... ADD COLUMN 带 DEFAULT 子句(PostgreSQL 11 之前版本、MySQL)ALTER TABLE ... ADD INDEX 且未使用 CONCURRENTLYALTER TABLE ... MODIFY COLUMN(MySQL 全表重写)CREATE INDEX 且未使用 CONCURRENTLY(PostgreSQL)ALTER TABLE ... ADD CONSTRAINT(触发全表扫描)向后兼容性:
滚动部署兼容性:
高风险变更的安全模式:
步骤 1:添加新列(允许 NULL) 步骤 2:部署同时向新旧两列写入的代码 步骤 3:回填历史数据 步骤 4:部署仅从新列读取的代码 步骤 5:删除旧列
prisma migrate diff 检测破坏性变更RunPython 操作未定义 reverse 函数queryInterface.removeColumn 未做数据备份## 迁移安全报告 **已审查迁移:** 3 个待处理迁移 **数据库:** PostgreSQL 15 ### 迁移 1:20260430_add_preferences.sql ✅ 安全 — 新增可空列,无锁表行为 ### 迁移 2:20260430_add_email_unique.sql 🟠 注意 — 在含 200 万行的表上添加唯一约束 锁持续时间:15–30 秒|创建期间阻塞写入 修复建议:使用 CREATE UNIQUE INDEX CONCURRENTLY + ADD CONSTRAINT USING INDEX ### 迁移 3:20260430_remove_legacy_columns.sql 🔴 危险 — 删除 3 个含 50 万非空值的列 1. 确认无任何代码引用这些列 2. 删除前备份数据 3. 应与代码变更分离部署 | 迁移文件 | 安全等级 | 锁风险 | 向后兼容 | |-----------|----------|--------|------------| | add_preferences | ✅ | 无 | 是 | | add_email_unique | 🟠 | 15–30 秒 | 是 | | remove_legacy | 🔴 | 极低 | 否 |
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章