在执行changeSet之前,liquibase是否会识别表是否已经是最新的?

ms.*_*.oe 4 liquibase

在我们的例子中,liquibase 用于更新现有安装的数据库。新安装的设备已经是最新的。

假设我们有一个新的安装。启动应用程序将强制执行 liquibase 更改集(例如更改列的类型),但正如我之前提到的,没有任何内容可以更新,因为列已经使用正确的类型创建了。

liquibase 是否识别出表列已经是最新的,或者是否尝试执行更改集,因为数据库更改日志表中没有相应的条目?

Mar*_*nor 5

Liquibase 使用另一种方法来避免分析目标数据库的数据字典。这使得数据库操作更加简单并且更加跨平台。

特殊表“DATABASECHANGELOG”保存应用于目标数据库实例的变更集的记录。该表还包含一个校验和(在运行时计算),以确定在 liquibase 运行之间是否更改了变更集。

因此,如果您更改了表列的类型,liquibase 可以检测到这一点,并在针对现有数据库运行时抛出错误。(显然,在新的数据库上,该表将按预期创建)。

最后,变更集文档描述了两个可选属性(“runAlways”和“runOnChange”),它们可以告诉 lqiuibase 将变更集多次重新应用到数据库。还有一个“clearCheckSums”命令可用于重置现有数据库的校验和。显然,当使用这样的选项时,您需要知道自己在做什么:-)

  • @ms.oe 检查“changelogSync”liquibase 命令:http://www.liquibase.org/documentation/command_line.html (2认同)