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

时间:2014-08-28 06:50:56

标签: liquibase

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

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

liquibase是否认识到表列已经是最新的,或者它是否尝试执行变更集,因为databasechangelog表中没有条目可用于它?

2 个答案:

答案 0 :(得分:4)

Liquibase使用另一种方法,避免分析目标数据库的数据字典。这使得DB操作更简单,更具跨平台性。

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

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

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

答案 1 :(得分:0)

Liquibase无法自动识别任何内容。

但是您可以在changeSet中使用<preConditions />来检查是否必须应用changeSet。