liquibase回滚应该如何工作?

时间:2014-12-04 16:53:15

标签: liquibase

我刚刚开始使用liquibase,它看起来非常有用。我最大的问题是回滚。

我将liquibase changelog烘焙到包含数据层的jar中,并在应用启动时,我会使用应用中jar中的更改日志自动迁移。如果我只是前进,这很好。

但是如果我有两个分支,每个分支都处理数据层jar并且我想使用相同的数据库在它们之间来回切换,那么它不起作用,因为一个分支中的更改日志具有与另一个分支不同的更改集。这本身并不是问题,但是当我交换分支并启动我的应用程序时,它不知道如何从其他分支回滚变更集,因为它们还没有在更改日志中。

这里的答案是否要小心?总是使用单独的DB?

为什么不将回滚放入数据库中的DATABASECHANGELOG表中,这样可以在没有更改日志文件的情况下回滚未知的变更集?

1 个答案:

答案 0 :(得分:2)

你是对的,回滚只是查看DATABASECHANGELOG表中应用的更改,并根据更改日志中的内容回滚changeSet。它可以将回滚信息存储在DATABAESCHANGELOG表中,但由于各种原因(包括简单性,空间和安全性),它并不存在。有时候根据更新的changeSet回滚信息而不是首次执行changeSet时设置的内容回滚更改会很不错。

在您的情况下,回滚更复杂,因为您希望经常切换分支。我通常发现,功能分支往往会进行相对独立的更改,因此即使您在分支之间进行更改,也可以保留数据库更改,因为它们创建了新表或列,而其他代码只是忽略了这些。肯定有时候这不是真的,但在开发环境中,您可以立即找到问题并根据需要解决问题。当您确实找到需要从其他分支回滚更改的时间时,您可以记住在切换分支之前回滚更改。有些团队根本不打扰回滚,只需在需要时重建他们的开发数据库(liquibase" contexts"对管理测试/开发数据非常有用)。

当您从开发转移到QA和生产时,您通常不必处理相同级别的分支更改,因此通常在您要回滚的changeSet与之间没有区别。更改日志。