1

我遇到了以下关于 liquibase 的文档,但对它如何识别独特更改的措辞感到困惑。 https://docs.liquibase.com/concepts/basic/changeset.html

它说:
'如果它已运行,则将跳过该变更集,除非该变更集中的 runAlways 标记设置为 true。运行变更集中的所有更改后,Liquibase 将插入一个新行,其中包含 id/author/filepath 以及 DATABASECHANGELOG 中变更集的 MD5Sum。

我的问题是:

  • 当所有这 3 个属性都不同于 DATABASECHANGELOG 表中存储的内容时,如果更改是唯一标识的?或者
  • 当这 3 个属性中的任何一个与更改日志表中存储的属性不同时,更改将被唯一标识。
4

2 回答 2

0

DATABASECHANGELOG 表文档

该表将每个变更集跟踪为一行,由“id”、“author”和“filename”列的组合标识。表上没有主键。这是为了避免任何特定于数据库的密钥长度限制。“id”、“author”和“filename”的组合在表的所有行中都是唯一的。

这意味着如果任何属性不同,则将其视为新的唯一条目,并且 Liquibase 不会将 MD5Sum 与该表中任何已存在的行进行比较。例如,即使 ID 值相同,当您开始使用 Liquibase 时,这可能并不明显。

于 2021-04-10T09:52:56.340 回答
0

该表的主要列DATABASECHANGELOG由您提到的三列组成(至少在 liquibase 版本 2.0.5 中,这是相当古老的):

ALTER TABLE databasechangelog 
  CONSTRAINT pk_databasechangelog 
  PRIMARY KEY (id, author, filename);

正如@veljkost 指出的那样,当前版本 4.3.2 没有主键,因为一些数据库供应商限制了索引的长度。

于 2021-04-10T09:50:28.847 回答