Liquibase tag 命令标签过多

Liquibase tag command tags too much

我正在使用 Liquibase 进行开发。我的数据库是 MySQL 5.5.42。这是我的样本变更日志文件:

databaseChangeLog:
  - changeSet:
      id: 1.0.0
      author: madhead
      changes:
        - sqlFile:
            path: "changesets/001-create_tables.sql"
            relativeToChangelogFile: true
      rollback:
        - sqlFile:
            path: "changesets/-001-drop_tables.sql"
            relativeToChangelogFile: true
  - changeSet:
      id: 1.0.0-tag
      author: madhead
      changes:
        - tagDatabase:
            tag: 1.0.0
  - changeSet:
      id: 1.1.0
      author: madhead
      changes:
        - sqlFile:
            path: "changesets/002-create_triggers.sql"
            relativeToChangelogFile: true
            endDelimiter: ";;"
      rollback:
        - sqlFile:
            path: "changesets/-002-drop_triggers.sql"
            relativeToChangelogFile: true
  - changeSet:
      id: 1.1.0-tag
      author: madhead
      changes:
        - tagDatabase:
            tag: 1.1.0

如您所见,在每个变更集之后我都标记了一个数据库(完全可以吗?)我希望 1.0.0-tag1.1.0-tag 变更集在 运行 liquibase update 从零开始。但我得到的是所有标记有最新标签的变更集:

如果我连续使用 updateCount 1 四次一切正常:

我认为问题可能是 DATEEXECUTED,这对所有变更集都是一样的。这是正确的行为吗?我该如何克服它?

您的诊断是正确的,因为第一个示例中的所有四个更改日志行都具有完全相同的日期和时间。查看the documentation for the tagDatabase change,发现生成的SQL是

UPDATE DATABASECHANGELOG SET TAG = 'version_1.3' WHERE DATEEXECUTED = (SELECT MAX(DATEEXECUTED) FROM (SELECT DATEEXECUTED FROM DATABASECHANGELOG) AS X);

我认为您唯一的解决方法是使用某种方法来确保不同标签的更新 运行 时间略有不同。使用您提到的 updateCount 1 是一种方法,但您也可以使用标签或上下文。