Directus 10中使用Knex批量重命名表遇迁移冲突的解决问询
Directus 10迁移报错“Migration keys collide!”的原因与解决方法
1. 错误原因
- 迁移文件的唯一标识(Migration Key)重复:Directus依靠迁移文件名里的前缀(比如
2023-06-23__002)作为唯一key来跟踪已执行的迁移任务。如果这个key已经在数据库的directus_migrations表中存在,或者本地迁移目录里有其他文件用了相同的key,就会触发该错误。 - 常见触发场景:
- 之前已经执行过同key的迁移,哪怕你修改了文件内容,Directus依然会识别到key重复。
- 迁移文件名的编号部分(比如
__002__)和其他已存在的迁移文件序号重复。
2. 修复步骤
方法一:修改迁移文件的唯一key
直接重命名你的迁移文件,调整文件名里的时间戳或编号部分,确保生成唯一的key。比如把2023-06-23__002__rename-tables.js改成2023-06-23__003__rename-tables.js(如果002已被使用),或者更新时间戳为当前时间,比如2024-05-20__001__rename-tables.js。
注意:文件名必须遵循
YYYY-MM-DD__NNN__description.js的格式,其中NNN是三位数字序号,要和所有已存在的迁移文件序号不重复。
方法二:清理冲突的迁移记录(谨慎操作)
如果这个迁移确实已经执行过,或者你需要移除冲突的key记录:
- 连接到Directus的数据库,找到
directus_migrations表。 - 查询表中是否存在和当前迁移文件key相同的记录(key就是文件名里
__description.js之前的部分,比如2023-06-23__002)。 - 若该记录对应的迁移已完成且无需保留,可以删除这条记录,然后重新执行迁移命令。
重要提醒:操作数据库前务必备份,防止数据丢失。
方法三:检查本地迁移文件目录
查看Directus项目下的extensions/migrations目录(或自定义迁移目录),确认是否有其他迁移文件使用了相同的YYYY-MM-DD__NNN前缀,删除或重命名重复的文件即可。
内容的提问来源于stack exchange,提问作者Robert Wildling
相关产品推荐
相关产品推荐

