2014-12-04 99 views
1

我刚刚开始使用liquibase,它似乎很有用。我最大的问题是回滚。liquibase回滚如何工作?

我在烤我liquibase的changelog到有我的数据层,并在应用程序启动时的罐子,我会自动迁移使用changelog的在应用程序的罐子。如果我只是向前迈进,这可以正常工作。

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

下面是答案,只是要小心?总是使用单独的数据库?

为什么不把回滚到DATABASECHANGELOG表在DB这样未知的变更可以回滚而不changelog文件?

回答

2

你是正确的,只是回滚看起来在DATABASECHANGELOG表应用的更改,并回滚基于什么是在更改日志的变更。它可以将回滚信息存储在DATABAESCHANGELOG表中,但不包括简单性,空间和安全性等多种原因。还有时候可以根据更新的changeSet回滚信息回滚更改,而不是在第一次执行changeSet时设置的更改。

在你的情况,回滚是比较复杂的,因为你找频繁切换分支机构。我通常发现的是,功能分支倾向于做出相对独立的更改,因此即使在分支之间进行更改,也可以将数据库更改保留在其中,因为它们创建了新的表或列,而其他代码只是忽略它们。这绝对不是真的,但是在开发环境中,您可以立即发现问题并根据需要解决问题。如果您发现次数需要回滚其他分支的更改,则可以记住在切换分支之前回滚更改。有些团队根本不打扰回滚,只是在需要时重建开发数据库(liquibase“上下文”对于管理测试/开发数据非常有帮助)。

随着您从开发转向质量保证和生产,您通常不必处理相同级别的分支更改,因此您希望回滚的变更集与更改日志中的内容之间通常没有区别。

+0

这很有道理。我认为这完全是你说的原因。我想我可以推荐人们在分支交换机之间标记和回滚,如果他们真的担心的话。老实说,我认为你可以考虑在更新日志表中存储回滚。我同意大小是一个问题,但现在大部分数据库都解决了它。并且您可以始终将其设置为可选(类似于将来生成SQL脚本的回滚,允许它写入数据库),如果您想重新生成数据库,也可以轻松提供一个选项以忽略数据库中的回滚信息。 我知道......补丁欢迎8) – 2014-12-08 21:22:26

+0

我给别人讲今天以及当更新日志文件被删除,不时存储变更将是dbdoc很有帮助。绝对是我将在即将发布的版本中考虑的事情 – 2014-12-08 23:10:24