knex迁移模块使用一个表,该表的架构具有迁移时间, batch id以及与该迁移步骤相关的文件名。
我使用一组不同的迁移脚本(不冲突)从代码库的branch A
到以前使用branch B
迁移的数据库运行knex迁移A
)。
问题:
当我尝试为B
运行迁移时,knex_migrations表中有一个文件(即12345678_add_a_table.js),该文件在的代码库中为 not 一个。由于我没有此文件,因此knex抱怨说它不了解 knex_migrations 表的状态,因此停止了迁移。
但是,这是不必要的,因为根本不需要该文件。因此,即使不确定100%确认knex_migrations表中发生的某些迁移来自何处,我也需要knex继续前进。
我想过两种方法可以成功完成knex。
解决方案:
--force
选项,我找不到这样的选项有没有办法做前者?我想后者会工作,但是我更喜欢前者,因为它通用且易于自动化。
答案 0 :(得分:0)
您应该从具有某种数据库版本的sql dump重新建立数据库模式更改,该版本与迁移处于一致状态。
这始终有效,并且您迁移的分支将始终保持一致,而没有任何多余的剩余物。使用脚本在运行迁移之前将数据库重置为一致状态是很简单的,就像运行knex命令行客户端一样(我想您有npm脚本)。
此外,如果数据损坏了,您应该已经准备好开发数据转储以恢复数据库(实际上,我通常只是在开发中使用e2e测试数据集,所以我根本不需要担心这些事情……DB总是在启动时重新生成。)
没有名为--force
的选项。我尚未实现,因为它被认为是有害的。用于开发的模式可能会偶然地变得非常不同,除非您不时将其重置为某种已验证状态(例如,如果您确实运行了迁移有错误)。