如何在Sequelize-CLI中仅回退两个迁移里的最新迁移?
如何仅回退Sequelize中最新的一个迁移
当然可以只回退两个迁移里最新的那一个!先给你两种可行的方法,再聊聊你遇到的“一次undo回退两个”的可能原因:
方法1:使用默认的undo命令(优先推荐)
正常情况下,sequelize-cli db:migrate:undo只会回退最近一次执行的迁移——也就是你说的两个里最新的那个。
如果你之前执行一次就回退了两个,大概率是以下两种情况:
- 你的其中一个迁移脚本里不小心包含了两个表/变更的逻辑(比如在一个脚本里同时创建了用户表和帖子表)
- 数据库里的
SequelizeMeta表记录异常(比如两条迁移记录被合并成了一条?可以去PostgreSQL里查这个表确认下)
先验证一下:执行sequelize-cli db:migrate:status,会列出所有迁移的状态,确认两个迁移都是up状态。然后执行一次db:migrate:undo,再看状态,应该只有最新的那个变成了down。
方法2:手动指定回退到某个迁移版本
如果默认方式不符合预期,你可以用db:migrate:undo:all加上--to参数,精准控制回退的范围。
假设你的两个迁移文件名是:
20240520000000-create-users.js(较早的那个)20240520000100-create-posts.js(最新的那个)
要只回退最新的create-posts迁移,执行这条命令:
sequelize-cli db:migrate:undo:all --to 20240520000000-create-users.js
这个命令的作用是:回退所有在create-users之后执行的迁移,也就是仅回退最新的那一个。
环境兼容性说明
你当前使用的sequelize-cli 5.5.1完全支持上述两种方法,和Node.js 13.7.0、Sequelize 5.21.3、PostgreSQL 11.2的搭配也没有问题。
内容的提问来源于stack exchange,提问作者Nyxynyx
相关产品推荐
相关产品推荐

