如何协调两个单独的knex迁移,以及knex_migrations表的文档?

时间:2019-05-20 13:07:43

标签: knex.js

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选项,我找不到这样的选项
  • 手动重建迁移表,诱使knex认为一切正常。

有没有办法做前者?我想后者会工作,但是我更喜欢前者,因为它通用且易于自动化。

1 个答案:

答案 0 :(得分:0)

您应该从具有某种数据库版本的sql dump重新建立数据库模式更改,该版本与迁移处于一致状态。

这始终有效,并且您迁移的分支将始终保持一致,而没有任何多余的剩余物。使用脚本在运行迁移之前将数据库重置为一致状态是很简单的,就像运行knex命令行客户端一样(我想您有npm脚本)。

此外,如果数据损坏了,您应该已经准备好开发数据转储以恢复数据库(实际上,我通常只是在开发中使用e2e测试数据集,所以我根本不需要担心这些事情……DB总是在启动时重新生成。)

没有名为--force的选项。我尚未实现,因为它被认为是有害的。用于开发的模式可能会偶然地变得非常不同,除非您不时将其重置为某种已验证状态(例如,如果您确实运行了迁移有错误)。