Liquibase - Mass应用ChangeSets,包随着时间的推移而变化

时间:2015-11-20 18:19:43

标签: plsql version liquibase

考虑如下情况:

  • changeSet 1:创建表A
  • changeSet 2:填充表格A
  • changeSet 3:创建引用表A的包B
  • changeSet 4:使用程序包B中的过程更新表A中的数据
  • changeSet 5:向表A添加列
  • changeSet 6:修改包B以使用新列

如果我正在开发并随着时间的推移将这些更改连续应用到数据库中,它应该可以正常工作。

但是,如果一个新的开发人员出现并试图从一开始就推动更改它不会失败吗?由于liquibase仅查看文件的当前状态,因此最新版本的软件包B包含对表A中不存在的列的引用,因此不会更改Set 3失败吗?

如何解决这个问题?有没有办法让Liquibase根据repo commit或tag提取changeSet?或者您是否必须编写一个包装器来连续检查所有发布标签并将liquibase应用于每个?

我唯一能想到的是阻止开发人员编写引用包的DDL / DML,而不用担心临时包状态。但如果开发人员想从头开始使用updateCount 3,事情也会失败。

1 个答案:

答案 0 :(得分:1)

是的,如果您的更改日志使用过程B作为更新过程的一部分,那么如果您正在编辑过程文件的SQL,则可能会遇到问题,因此它与一次运行不同。

最简单的方法是不编辑过程sql,而是让changeSet 3引用packageb-1.sql CREATE PROCEDURE文件,然后让changeSet 6引用另一个packageb-2.sql ALTER PROCEDURE文件。您最终会得到更多文件而无法进行版本控制级差异,但无论何时运行liquibase,在changeSet 3中创建的过程将始终相同。