【问题标题】:Liquibase tag command tags too muchLiquibase tag 命令标签太多
【发布时间】:2015-03-27 00:09:43
【问题描述】:

我正在使用 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,这对于所有变更集都是一样的。这是正确的行为吗?我该如何克服它?

【问题讨论】:

    标签: mysql database liquibase


    【解决方案1】:

    您的诊断是正确的,因为第一个示例中的所有四个变更日志行都具有完全相同的日期和时间。查看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 是一种方法,但您也可以使用标签或上下文。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多