2016-11-10 91 views
0

我正在尝试使用Liquibase来管理设备的后端SQLite数据库。这个想法是,在安装时,应用程序可以生成回滚脚本,如果应用程序被卸载并替换为早期版本,则可以使用该脚本。如何在Liquibase中每天创建多个标签?

出现的问题是,运行tagDatabase变更集将覆盖当天早些时候完成的所有标记。检查documentation揭示了标记操作运行如下面的示例SQL:

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

那么,有没有Liquibase的一天做多个标签的范围内的方法吗?还是我需要编写自己的SQL来更改DATABASECHANGELOG表?我宁愿不这样做,因为它可能会打破未来版本的Liquibase。

+0

我没有明白你的意思,“出现的问题是运行tagDatabase变更集将覆盖当天早些时候完成的任何标签。”它只是标记数据库中最后一次执行的变更集,其中包含您指定的标记,您覆盖的问题是什么? – dbf

+0

我的问题是,在覆盖现有标签时,不再可能针对它们生成回滚。 –

回答

1

好吧,我看到你的数据库看起来像DATEEXECUTED没有时间(只有日期)。是否有可能随着时间的推移将其改为日期类型? 我在这里看到一些讨论:https://github.com/liquibase/liquibase/pull/392看起来像一个已知的问题,但在修复中提到的数据库列表中没有sqllite。 因此,看看最新版本,如果它没有修复那里可能还没有支持,你需要使用普通的SQL查询或自定义更改(http://www.liquibase.org/documentation/changes/custom_change.html)自己实现此标记逻辑。