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

Liquibase变更集仅作为单个事务执行

武博艺
2023-03-14

在Liquibase论坛的一次讨论中,开发人员Nathan Voxland说Liquibase应该在每个变更集之后提交。我知道这是一个七年前的线程,所以从那以后可能发生了很多变化,但也许没有?

它应该在变更集之后提交。在大多数数据库上,addColumn也会自动提交。

changeSet标记的文档可以解释为“在changelog中的所有前提条件成功之后提交”,这与7年前的帖子相矛盾。

我有一个main_changelog文件,它的唯一目的是包含目录中的所有更改日志。该目录中的两个(目前)变更日志各有两个变更集。这两个变更日志在它们的变更集之外都有一个onfail=“halt”前提条件。

我的测试环境具有changelog_1成功的前提条件(因此将执行其中的所有变更集),而changelog_2前提条件失败。

我看到的是,在这个全新的数据库上,DATABASECHANGELOG表创建了,但却是空的。没有一个变更集被提交,大概是因为后来的前提条件在失败时停止。我希望提交到暂停之前的所有变更集。

按预期工作?还是虫子?

共有1个答案

祁俊拔
2023-03-14

从liquibase文档中可以看到:

变更日志级别的前提条件应用于所有变更集,而不仅仅是当前变更日志或其子变更日志中列出的变更集。

因为您的前提条件是changelog级别的,并且您指定了HALT,所以liquibase不应用任何变更集。事务性从来没有真正发挥作用。

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

  • 我有一个由mysql数据库支持的dropwizard应用程序。我正在使用liquibase包装器进行数据库迁移 首先,我使用“db dump”命令自动生成迁移。xml文件。 现在我正在重构数据库,我希望能够更新特定的列名和表的名称。 我使用先决条件跳过已经生成的表以跳过“”命令 现在如何跳过主键和外键约束的执行?在变更日志级别是否有一个先决条件可以用来表示“跳过已执行的变更集”?或者我只是创建一个

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

  • 我需要创建一个具有架构列表的@Scheduled方法,对于每个架构,从2个表中删除行。 我将deleteFromCustomerTables定义为@Transactional(propagation=propagation.REQUIRES_NEW),并在其中使用EntityManager从2个表中删除行。 为了使其工作,我需要将@Transactional添加到计划FixedDelayTask,

  • 我有一个使用Liquibase for PostgreSQL定义的现有模式。我正在添加对Oracle的支持,这需要进行重大更改。有些create-table标记只需更改数据类型即可工作,有些则不然(需要sql更改)。当前的changelog-schema文件在单个change-set下有多个create-table语句(我知道这不是一个好的设计,但这正是我现在要处理的),为了重用那些create-