在Git分支之间切换时,如何处理Liquibase中数据库结构的变化



假设我有一个USER MySql表,在'main' Git分支中包含id, name, email, address行。我创建了一个新的特性分支,并决定从USER表中删除"address"列,并将其放入自己的单独表中。这是通过向我的Liquibase变更日志文件添加一个新的变更集来完成的。之后我重构了我的代码,一切都运行良好!

现在我切换回'main'分支并尝试运行我的代码。现在一切都崩溃了,因为我的代码期望在USER表中有一个'address'列,但它不存在。

这种情况在我们的代码库中经常发生。有办法避免这种情况吗?以某种方式能够"回滚"不在"主"分支上的更改集?

这篇文章的评论有一些很好的建议给你。有多种方法可以解决这个问题,其中大多数都涉及改变组织数据库和分支的方式。以下是一些答案的摘要和来源链接。

  1. 当你在StackOverflow上搜索分支数据库迁移时,有许多可用的例子
  2. a:无论如何,我们处理客户代码和分支的方式是为给定的分支提供特定的DB/模式。通过这种方式,您可以从分支点获得模式和数据,并且只将diff迁移到当前情况。我们没有撤销更改,即使理论上liquebase可以支持这一点,因为我们觉得这太麻烦了,而且容易出错。假设liquibase保持自己的状态,那么迁移总是像获取给定分支上的当前状态并应用所有状态一样简单。只应用了新的更改集,使模式处于良好状态。">
  3. 复杂分支系统中的数据库迁移B: "…从基线重新构建数据库。在初始开发期间,该基线是一个空数据库,在维护期间,它是活动数据库的副本(从转储恢复)。我们只有一堆SQL和XML脚本,我们将它们应用到基线以获得当前系统(本质上是迁移,但不是设计为增量运行)。更新或切换分支非常简单:使数据库失效,加载转储以建立基线,运行脚本。

相关内容

  • 没有找到相关文章

最新更新