8

outOfOrder当设置为 true时,我在日志中收到以下警告消息:

警告:outOfOrder 模式处于活动状态。迁移运行可能无法重现。

这条消息的确切含义是什么?如果有人能告诉我迁移发生时会发生什么,那就太好了。任何示例都会有所帮助。

4

2 回答 2

7

假设 3 个迁移:

  1. 创建两个名字“Tom”和“Jerry”
  2. 添加“米奇”作为第三个
  3. 把名字变成大写

使用 outOfOrder 运行可能会导致您的迁移应用如下:

1, 3, 2 -> 在数据库中:汤姆、杰瑞、米奇

稍后重新运行它会产生

1, 2, 3 -> 在数据库中:汤姆、杰瑞、米奇

这就是为什么 outOfOrder 具有潜在危险并且第一次迁移运行可能无法重现的原因。

于 2013-03-12T09:05:49.370 回答
5

为了增加 Axel 的答案,不仅结果数据可能会因顺序而异,而且迁移甚至可能是不可能的。考虑:

迁移:

  1. 创建表foo
  2. 添加列foo.bar
  3. 将列重命名foo.barfoo.baz

执行顺序:

  • 1, 2, 3 →foo有列baz
  • 1, 3, ... → 应用错误 3:foo.bar未找到列
  • 2,... → 应用错误 2:foo找不到表
  • 3,... → 应用错误 3:foo找不到表
于 2015-01-13T20:19:09.800 回答