如何控制db-migrate与db-migrate-pg的迁移执行顺序及指定迁移文件?
如何用db-migrate单独运行特定迁移或指定顺序执行迁移
先澄清官方命令的误区
你看到的db-migrate up 20150207135259-myFancyMigration命令,并不是单独执行这个迁移文件——它的实际作用是把数据库迁移到该文件对应的版本,所以会自动跑完所有没执行过、版本号比它早的迁移,这就是为啥会连带执行之前所有迁移的原因。
靠谱的优雅解决方案
1. 单独运行单个迁移文件
临时目录法(推荐):
- 建个临时目录,比如
./temp-mig - 把要单独跑的迁移文件复制进去
- 执行命令:
db-migrate up --migrations-dir ./temp-mig
这个方法不用改原文件或数据库,安全独立,完全不会影响其他迁移的执行状态。
- 建个临时目录,比如
手动标记前置迁移(谨慎用):
db-migrate会在数据库里建个migrations表记录执行状态。如果实在要单独跑某个迁移,可以手动给它之前的所有迁移在这个表里插记录,标记为已完成。之后再执行db-migrate up 目标文件名,就只会跑这个目标迁移。注意:操作数据库前一定要备份,别搞乱数据。
2. 指定顺序执行迁移
自定义文件名前缀代替时间戳:
把默认的时间戳前缀改成数字序号,比如001-init-db.js、002-add-user-table.js,db-migrate默认会按文件名排序执行,这样就能完全控制执行顺序。分阶段指定版本执行:
先执行到某个中间版本,再执行下一批,比如:# 先执行到001的迁移 db-migrate up 001-init-db # 再执行003的迁移(跳过002) db-migrate up 003-add-order-table这种方式适合需要跳过某些迁移、按自定义顺序执行的场景。
内容的提问来源于stack exchange,提问作者Sunny
相关产品推荐
相关产品推荐

