liquibase 是不是有一种方法可以在不实际执行的情况下测试回滚策略?

Posted

技术标签:

【中文标题】liquibase 是不是有一种方法可以在不实际执行的情况下测试回滚策略?【英文标题】:Does liquibase have a method to test a rollback strategy without actually executing it?liquibase 是否有一种方法可以在不实际执行的情况下测试回滚策略? 【发布时间】:2018-03-19 20:43:57 【问题描述】:

我是 Liquibase 的新手...

今天我使用 --liquibase 格式的 sql 编写了一个 Liquibase 变更集。

我创建了两个表,其中第二个表与第一个表有外键依赖关系。

我的回滚策略是(错误地)drop table1;删除表2。当我运行更新并测试回滚时,由于外键约束而失败。但是,当我纠正错误并尝试重新运行它时,它失败了,因为校验和不匹配。

我知道显而易见的答案是进行更多的原子变更集,但是...

Liquibase 是否支持在不实际运行的情况下测试这类事情的方法,这样我就可以避免编辑回滚时的校验和问题?

失败:是否有校验和问题的解决方法可以让我在运行更新后编辑我的文件? (ctrl+z?)

【问题讨论】:

【参考方案1】:

您的问题的简短回答是,没有 Liquibase 没有这样的东西。

Liquibase 是一个很棒的工具包,但它没有太多花里胡哨的东西,而且对于应该如何使用它或者你的工作流程应该是什么,它没有太多的“意见”。在您的情况下,我建议处理该问题的一种方法是删除数据库,然后从更改日志中重新创建它。如果您已经在多个地方部署了变更日志,那可能是不可能的,如果您不准备这样做,那可能是个问题。

有一个选项可以在变更集上指定 validChecksums 属性,因此您可以使用它,但一般来说,如果您使用它,您会使变更日志更加复杂。

如果您想查看功能更全面且能够在部署之前预测更改的功能,请查看我公司的产品Datical DB。它以 liquibase 为核心,但增加了更多(并相应定价)。

【讨论】:

感谢您的回答。我能够使用 validChecksum 参数。使用 sql 我把它放在 --changeset 声明的下面: --validCheckSum 7:fbaf36618f559.... (我所包含的校验和是新的校验和,而不是原来的。)【参考方案2】:

Liquibase 提供updateTestingRollback 命令,基本上更新数据库,然后测试其回滚,如果成功,再次应用更改。

您的校验和无效问题可以通过clearCheckSums 命令解决。它从数据库中删除当前校验和,并且在下次更新时,已部署的更改集将重新计算其校验和,并且将部署尚未部署的更改集。

更多详情请查看 Liquibase commands。

【讨论】:

以上是关于liquibase 是不是有一种方法可以在不实际执行的情况下测试回滚策略?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中,是不是有一种方便的方法来重载 C++ 中的方法? [复制]

在 PHP 中是不是可以在不先提取其内容的情况下检查 Zip 文件的内容?

使用SQL Server中的UPPER函数进行索引

Liquibase DB 独立插入语句

ListView,是不是有一种简单的方法可以允许在内部拖动项目(内置)?

是否有一种 FastAPI 方法可以在全球范围内访问当前的请求数据?