问题描述
我遇到了以下有关 liquibase 的文档,但对它如何识别独特更改的措辞感到困惑。 https://docs.liquibase.com/concepts/basic/changeset.html
上面写着:
'如果它已运行,除非在该变更集中将 runAlways 标记设置为 true,否则将跳过该变更集。运行变更集中的所有更改后,Liquibase 将在 DATABASECHANGELOG 中插入一个带有 id/author/filepath 的新行以及变更集的 MD5Sum。'。
我的问题是:
解决方法
表 DATABASECHANGELOG
的主列由您提到的三列组成(至少在 liquibase 2.0.5 版本中,这是相当古老的):
ALTER TABLE databasechangelog
CONSTRAINT pk_databasechangelog
PRIMARY KEY (id,author,filename);
正如@veljkost 指出的,当前版本 4.3.2 没有主键,因为一些数据库供应商限制了索引的长度。
,来自DATABASECHANGELOG table docs:
该表将每个变更集作为一行进行跟踪,由“id”、“author”和“filename”列的组合标识。表上没有主键。这是为了避免对密钥长度的任何特定于数据库的限制。 “id”、“author”和“filename”的组合在表的所有行中都是唯一的。
意思是,如果任何属性不同,则将其视为新的唯一条目,并且 Liquibase 不会将 MD5Sum 与该表中任何已存在的行进行比较。例如,即使 ID 值相同,当您开始使用 Liquibase 时,这可能并不明显。