mysql - Liquibase tag 命令标签过多

标签 mysql database liquibase

我正在使用 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 后,变更集会得到相应的标记。但我得到的是所有标记有最新标签的变更集:

OMG, everything is tagged with latest tag!

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

What I want to see

我认为问题可能出在 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 是一种方法,但您也可以使用标签或上下文。

关于mysql - Liquibase tag 命令标签过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29282678/

相关文章:

php - 左加入所有主题仅按粘性最后帖子顺序和最后帖子 DESC

php - 按收藏夹表对 MySQL 表行进行排序

PHP代码可以更新MySQL数据库,但不能插入

mysql - 如何在mysql中保存历史数据?

java - 不能用命令行运行liquibase

mysql - 通过尝试插入来测试 MYSQL 中的重复项

java - 如何修复Android Studio中的网络安全配置?

mysql - Varchar 字符长度

java - 使用 mvn liquibase :diff? 时如何禁用删除表和列

liquibase - 1 个更改集有重复的标识符