什么决定了 Liquibase 变更集执行顺序
What decides Liquibase changeset execution order
我用 Google 搜索了一下,发现变更集的执行顺序取决于它们在文件中的顺序。
下面是同一文件中的变更集列表:
<changeSet id="A" author="abc">
</changeset>
<changeSet id="B" author="abc">
</changeset>
执行的先后顺序是根据id决定的还是它们的放置顺序?另外,如果 <changeSet>
在不同的文件中,执行顺序是什么?
执行顺序基于文件中的变更集顺序(它们放置的位置)。
通常这是他们应该执行的顺序。
如果加载两个或更多文件,将执行第一个文件中的所有变更集,然后是第二个文件中的所有变更集,依此类推...
您可以根据版本、一些标签等创建文件。
正常更新操作的脚本执行顺序与 Lemmy 上面给出的一样。但是,如果您修改了一些脚本并且变更集的 "runOnChange" 属性设置为 true,那么当您执行更新操作时,它将只执行那些修改或更新的变更集 - 再次按照描述的相同顺序进行莱米。
现在,如果您执行回滚操作,我注意到在 "second run" 中执行的变更集只执行那些 "runOnChange" 变更集 - 它们首先执行。所以看起来回滚不会基于原始变更集执行的降序发生——而是基于变更集执行时间戳的降序。如果在原始 运行 的脚本的后面部分创建了 "dependencies",这可能会导致回滚 sqls 失败。我认为这可能是 liquibase 中关于回滚行为的错误,或者可能是故意的。
我用 Google 搜索了一下,发现变更集的执行顺序取决于它们在文件中的顺序。
下面是同一文件中的变更集列表:
<changeSet id="A" author="abc">
</changeset>
<changeSet id="B" author="abc">
</changeset>
执行的先后顺序是根据id决定的还是它们的放置顺序?另外,如果 <changeSet>
在不同的文件中,执行顺序是什么?
执行顺序基于文件中的变更集顺序(它们放置的位置)。 通常这是他们应该执行的顺序。
如果加载两个或更多文件,将执行第一个文件中的所有变更集,然后是第二个文件中的所有变更集,依此类推... 您可以根据版本、一些标签等创建文件。
正常更新操作的脚本执行顺序与 Lemmy 上面给出的一样。但是,如果您修改了一些脚本并且变更集的 "runOnChange" 属性设置为 true,那么当您执行更新操作时,它将只执行那些修改或更新的变更集 - 再次按照描述的相同顺序进行莱米。
现在,如果您执行回滚操作,我注意到在 "second run" 中执行的变更集只执行那些 "runOnChange" 变更集 - 它们首先执行。所以看起来回滚不会基于原始变更集执行的降序发生——而是基于变更集执行时间戳的降序。如果在原始 运行 的脚本的后面部分创建了 "dependencies",这可能会导致回滚 sqls 失败。我认为这可能是 liquibase 中关于回滚行为的错误,或者可能是故意的。