【问题标题】:How to run multiple Flyway migrations in a single transaction?如何在单个事务中运行多个 Flyway 迁移?
【发布时间】:2017-08-29 13:59:57
【问题描述】:

我有多个脚本需要针对数据库运行。就我而言,在每个版本的一个脚本中进行迁移是一项绝对不可行的任务。

但是,对于多次提到的解决方法,制作次要版本的脚本,这也不是我期望的方式。 如果我有 4 个小脚本需要运行,我希望所有 4 个脚本都在同一个事务中。所以如果 4/4 失败,之前的 3 应该回滚。

我对此更加困惑,如果我从版本 2 升级系统 --> 4 和 3 会通过,而 4 会失败。我陷入了困境,希望 v3 回滚足够好。

我是否缺少命令行界面的某些内容,我可以告诉 flyway 在单个事务中迁移所有内容。或者“测试”迁移并回滚所有内容,让我知道迁移是否可以在没有实际提交任何内容的情况下工作。

编辑

====上下文====

我在一个有多个全栈开发人员的环境中工作。我们不断添加和更改功能的地方。因此,我们都有自己的数据库。每个更改都会被编写脚本,因此一旦脚本影响到我们的分支或集成分支,更改就可以应用于数据库。

因此,在多台机器之间运行时,每个版本都有多个脚本。

声明每个开发人员必须不断更新一个给定文件是不可行的。因为让开发机器使用与登台和生产数据库不同的版本方案也是不明智的。更不用说在合并分支时这会导致地狱。

在合并时,如果存在与脚本顺序有关的问题。整个集合应该回滚,直到可以发生干净的迁移。

我们有自己的迁移工具,我面临的唯一问题是它还不能在 docker 中工作,我希望不必更改它。

【问题讨论】:

  • 我只需要更改您问题的标题,使其作为技术问题而不是基于意见的问题有意义。您并不是真的在问您是否错误地使用了 Flyway(这对 SO 来说不是一个好问题)。您在问是否可以在同一个事务中运行多个脚本,这是一个很好的问题。我还删除了 docker 标签。您的问题与 Docker 无关。您以前的迁移工具不能在 Docker 上运行的事实充其量只是轶事。

标签: flyway


【解决方案1】:

发布此问题时,这可能是不可能的,但现在可以了。 来自 Flyway 文档here

您还可以通过将 group 属性设置为 true 来配置 Flyway 以将单个迁移运行的所有迁移的整个执行包装在单个事务中。

【讨论】:

    【解决方案2】:

    我的意思是命令行运行不可能是每个脚本都在一个事务中运行,但是当您创建一个脚本时,您可以在一个事务中运行。

    例如:

    • 下载flyway。

      wget https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/4.1.2/flyway-commandline-4.1.2-linux-x64.tar.gz
      
    • 解压flyway(必须安装java)。

      tar zxvf flyway-commandline-4.1.2-linux-x64.tar.gz
      
    • 去飞路

      cd flyway-4.1.2
      
    • 在 /conf/flyway.conf 中配置

      flyway.url=jdbc:h2:file:./foobardb
      flyway.user=SA
      flyway.password=
      
    • 在名为 Vx__xxxxxx.sql 的 /sql 目录中创建空迁移

      select 1;
      
    • 在一个脚本 /sql Vlast_xxx.sql 中为每个迁移创建迁移 谁在一个事务中运行。

      create table ...; create table ..; create procedure ...;
      
    • 运行迁移

      flyway-4.1.2> flyway migrate
      

    在 docker 中使用 RUN 命令之前,我想你已经知道了。

    这只是一个模板,但经过几次修复后,它可能没问题。

    【讨论】:

    • 这个答案解决了所提出的问题。问题是如何在单个事务中运行不同的脚本,它指出将所有脚本都放在一个脚本中是不切实际的。此外,问题不是关于如何安装 Flyway。
    • 答案是你可以在一个脚本中完成。
    猜你喜欢
    • 2017-03-03
    • 2020-11-13
    • 2020-03-18
    • 2015-07-25
    • 2012-07-30
    • 2020-06-11
    • 2015-09-21
    • 2016-12-12
    • 2013-03-06
    相关资源
    最近更新 更多