2017-04-04 86 views
0

我有多个脚本需要针对数据库运行。就我而言,将每个版本的一个脚本进行迁移是绝对不可行的任务。我使用flyway错了吗?

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

我对此更加困惑,并且如果我正在从版本2升级系统 - > 4和3遍,而4失败。我处于困境,希望v3回滚足够好。

我是否错过了命令行界面,我可以告诉flyway在单个事务中迁移所有内容。或者“测试”迁移并将所有内容都回滚,让我知道迁移是否可以在没有实际承诺的情况下运行。

编辑

==== ====语境

我在与多个全栈开发的环境中工作。我们在哪里不断添加和改变功能。因此,我们都有自己的数据库。每个变更都会被编写脚本,以便在脚本影响我们的分支或集成分支时,可以将更改应用到数据库。

因为在多台机器之间进行操作时,每个版本都有多个脚本。

这是不可行的,说明每个开发人员必须不断更新一个给定的文件。因为将开发机器与分段和生产数据库采用不同的版本方案也是不明智的。更不用说这会在合并分支时造成的。

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

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

回答

0

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

例如:

  • 下载迁徙路线。

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

    tar zxvf flyway-commandline-4.1.2-linux-x64.tar.gz 
    
  • 进入迁飞

    cd flyway-4.1.2 
    
  • 配置在/ conf目录/迁徙路线。CONF

    flyway.url=jdbc:h2:file:./foobardb 
    flyway.user=SA 
    flyway.password= 
    
  • 名为Vx__xxxxxx.sql

    select 1; 
    
  • 创建与每一个迁移的迁移在一个脚本中/ SQL Vlast_xxx.sql 谁在一个事务中运行/ sql目录创建空迁移。

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

    flyway-4.1.2> flyway migrate 
    

在之前命令使用RUN泊坞窗,我想你一定知道它。

这只是一个模板,但经过一些修复后,它可能会很好。