我正在使用 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-tag
和 1.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
是一种方法,但您也可以使用标签或上下文。
关于mysql - Liquibase tag 命令标签过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29282678/