【发布时间】:2015-09-30 15:49:08
【问题描述】:
我的问题是 liquibase 没有回滚我的一些变更集,这些变更集是在我尝试回滚的变更集上设置标签后执行的。
例如,我创建了两个正常执行的变更集(A 和 B)。然后我创建了另一个变更集,它将变更集 B 的标签设置为 release1。这个变更集也可以按预期工作。但是,我随后使用回滚命令执行另外 5 个变更集。而且这些也执行得很好。
现在问题来了,当我运行以下命令时:
java -jar liquibase.jar --changeLogFile=..\database\changelog-create.xml rollback release1
现在不应该回滚在 release1 标签执行后执行的任何变更集吗?
如果是这样,这是我的问题,它们不会被回滚。但在控制台中我得到回滚成功。
【问题讨论】:
-
我理解回滚到标签(see here)的描述也是一样的。因此,也许还有其他问题。您可以尝试将日志级别更改为调试(将
--logLevel=debug添加到您的命令行),看看是否提供了更多详细信息... -
感谢@Jens 的回复我已尝试在此调试行中添加,但这没有提供其他信息。我认为这仅在出现异常时才有效。我不太确定说实话,但这对我没有任何帮助
-
您应该明确地看到 liquibase 提供的日志消息数量的差异。否则调试日志级别的开关不起作用!
-
@Jens 好的,我让它显示所有调试消息。一切看起来都很好,除了似乎没有执行任何 sql 回滚。我不确定他们是否应该出现在调试中,但他们没有这样做。您是否可以提供正确的方法来设置标签?我目前的做法如下 'UPDATE DATABASECHANGELOG SET TAG = 'release1' WHERE DATEEXECUTED = (SELECT MAX(DATEEXECUTED) FROM (SELECT DATEEXECUTED FROM DATABASECHANGELOG) AS X) AND ORDEREXECUTED = (SELECT MAX(ORDEREXECUTED) FROM (SELECT ORDEREXECUTED from DATABASECHANGELOG) AS Y);'
-
我注意到的其他事情是......唯一被回滚的是设置标签的变更集。我希望这会在第三次执行时回滚,而带有标签的变更日志是第二次执行的。但是我再一次看不出为什么其他变更集没有被回滚。然而,其他变更集随后在不同的命令中执行。
标签: sql command-line liquibase rollback changeset