如何在一个事务中运行多个Flyway迁移?

如何在一个事务中运行多个Flyway迁移?,flyway,Flyway,我有多个脚本需要在数据库上运行。在我的例子中,每个版本在一个脚本中进行迁移是绝对不可行的 然而,由于已经多次提到的解决方法是,制作次要版本脚本,这也不是我所期望的方式。 如果我有4个需要运行的小脚本,我希望在同一事务中有全部4个。因此,如果4/4失败,前3个应该回滚 我对此更加困惑,如果我从版本2-->4升级系统,并通过3次,而版本4失败。我的处境很艰难,希望v3回滚足够好 我是否缺少命令行界面,在该界面中,我可以告诉flyway在单个事务中迁移所有内容。或者“测试”迁移并回滚所有内容,这样我就

我有多个脚本需要在数据库上运行。在我的例子中,每个版本在一个脚本中进行迁移是绝对不可行的

然而,由于已经多次提到的解决方法是,制作次要版本脚本,这也不是我所期望的方式。 如果我有4个需要运行的小脚本,我希望在同一事务中有全部4个。因此,如果4/4失败,前3个应该回滚

我对此更加困惑,如果我从版本2-->4升级系统,并通过3次,而版本4失败。我的处境很艰难,希望v3回滚足够好

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

编辑

==上下文====

我在一个有多个完整堆栈开发人员的环境中工作。在这里,我们不断添加和更改功能。正因为如此,我们都有自己的数据库。每个更改都会编写脚本,以便在脚本影响我们的分支或集成分支时,可以将更改应用于数据库

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

声明每个开发人员必须不断更新一个给定的文件是不可行的。因为将开发机器置于与暂存和生产数据库不同的版本方案上也是不明智的。更不用说在合并分支时这会引起什么麻烦了

此外,在合并时,如果脚本的顺序出现问题。整个集合应该回滚,直到可以进行干净的迁移


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

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

例如:

  • 下载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)

  • 去飞道

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

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

    select 1;
    
  • 在一个脚本中创建每次迁移的迁移/sql Vlast_xxx.sql 谁在一次交易中运行

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

    flyway-4.1.2> flyway migrate
    
在docker之前使用RUN命令,我想你们已经知道了


它只是一个模板,但经过几次修复后,可能就可以了

当这个问题发布时,这可能是不可能的,但现在它是。 从Flyway文档:

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


我只是不得不改变你问题的标题,使之成为一个有意义的技术问题,而不是一个基于观点的问题。你并不是真的在问你是否用错了Flyway(这对SO来说不是个好问题)。您正在询问是否可以在同一事务中运行多个脚本,这是一个很好的问题。我还删除了docker标签。你的问题与Docker无关。您以前的迁移工具在Docker上不起作用这一事实充其量只是一个轶事。这个答案并没有解决所提出的问题。问题是如何在一个事务中运行不同的脚本,它指出将所有脚本都放在一个脚本中是不切实际的。此外,问题不在于如何安装Flyway。
flyway-4.1.2> flyway migrate