Plsql Liquibase—在包随时间变化的情况下大量应用变更集

Plsql Liquibase—在包随时间变化的情况下大量应用变更集,plsql,version,liquibase,Plsql,Version,Liquibase,给定一个场景,例如: 变更集1:创建表A 变更集2:填充表A 变更集3:参照表A创建包B 变更集4:使用包B中的程序更新表A中的数据 变更集5:将列添加到表A 变更集6:修改包B以使用新列 如果我正在开发这些更改,并随着时间的推移将其应用到数据库中,那么它应该可以正常工作 然而,如果一个新的开发人员出现,并试图从一开始就进行更改,它不会失败吗?由于liquibase只查看文件的当前状态,变更集3不会因为包B的最新版本包含对表a中尚不存在的列的引用而失败吗 如何解决这个问题?有没有一种方法可以

给定一个场景,例如:

  • 变更集1:创建表A
  • 变更集2:填充表A
  • 变更集3:参照表A创建包B
  • 变更集4:使用包B中的程序更新表A中的数据
  • 变更集5:将列添加到表A
  • 变更集6:修改包B以使用新列
如果我正在开发这些更改,并随着时间的推移将其应用到数据库中,那么它应该可以正常工作

然而,如果一个新的开发人员出现,并试图从一开始就进行更改,它不会失败吗?由于liquibase只查看文件的当前状态,变更集3不会因为包B的最新版本包含对表a中尚不存在的列的引用而失败吗

如何解决这个问题?有没有一种方法可以让Liquibase基于repo commit或tag拉取变更集?或者您需要编写一个包装器来连续签出所有的发布标签,并对每个标签应用liquibase吗


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

是的,如果您的变更日志将过程B作为更新过程的一部分,那么如果您正在编辑过程文件的SQL,使其在一次运行到下一次运行时有所不同,则可能会遇到问题


最简单的方法是不编辑过程sql,而是让变更集3引用packageb-1.sql创建过程文件,然后让变更集6引用不同的packageb-2.sql ALTER过程文件。您最终会有更多的文件,并且无法进行版本控制级别的差异,但是无论何时运行liquibase,在变更集3中创建的过程都将是相同的。

对于变更集3和变更集6,它们是否通过runOnChange引用包中的同一文件?我不愿意放弃对包的版本控制。这不仅仅是丢失了diff,而是有人可能会为alter过程选择错误的版本,并创建回归bug等等。