当前位置: 首页 > 知识库问答 >
问题:

Liquibase-应用变更集的质量,其中包随时间变化

年业
2023-03-14

给定一个场景,例如:

    null

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

如何解决这一问题?有没有一种方法让Liquibase基于repo commit或标记来拉变更集?或者您必须编写一个包装器来串行检查所有的发布标记并将liquibase应用于每个标记?

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

共有1个答案

宰父焕
2023-03-14

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

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

 类似资料:
  • 我们使用liquibase对数据库进行源代码控制。最初,我们从Postgres开始,创建了数据类型为特定于Postgres的列的变更集。 例如,我们有一个变更集,它创建了具有“JSON”类型字段的表。现在,我们想转移到其他数据库。因此,当我们针对另一个数据库运行变更集时,它无法创建表。我尝试添加“failOnError=false”。但是,后面的变更集失败,因为该表不存在。 您能建议如何重构旧的变

  • 在liquibase中是否有一种方法来创建java代码更改集(即提供一个java类,它将接收一个JDBC连接并在数据库中执行一些更改)? (我知道飞翔道有这样特点)

  • 我在酗酒方面遇到了麻烦。出于某种原因(我没有更改任何现有的变更集或其他东西),它试图应用已经在base中的变更集。所以我得到了一些错误,比如“关系”表“已经存在”。 我找到了这个标签-

  • 我想在changelog文件中使用以下变更集标记数据库,以便将来回滚。当我应用这个变更集时,我在databasechangelog中注意到,前面的变更集也用标记更新了。 changelog文件中的变更集 下面是从databasechangelog表中提取的内容,function51是上一次运行的变更集 有人遇到过吗?我使用的是Liquibase 3.1.1 多谢了。

  • 我正在试用Liquibase,目的是尝试自动化数据库部署,并获得数据库更改的一些结构。 这里是我想评估自动回滚的变更集。现在,我试图在中引入一个错误,并希望在错误发生后运行,它还会从表中删除列。 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd“> 但是真正发生的是表中没有条目。但表中的列仍然存在。我确实查看了liqui

  • 我有一个简单的liquibase变更集(下面),我正在尝试测试它。 这是应用程序启动后运行的第二个更改日志。 我故意编写了一个错误代码,其中我尝试创建列“new_2”两次,以强制回滚变更集中的所有条目:ADD_COL_2 然而,即使生成了回滚文件,并且我看到: 信息4/13/16 12:17 AM:LiquiBase:classpath:db/changelog/db.changelog-mult