我使用飞路错了吗?
我有多个脚本需要对数据库运行。 就我而言,将每个版本的脚本迁移到一个绝对不可行的任务。
然而,几次提到的解决方法是制作小版本脚本,这也是我所期望的。 如果我有4个小脚本需要运行,我希望在同一个事务中拥有全部4个脚本。 所以如果4/4失败,前3应该回滚。
我更加困惑,如果我从2 – > 4和3通过升级系统,而4失败。 我仍然处于困境,希望v3回滚足够好。
我是否在命令行界面中错过了某些东西,我可以告诉flyway在单个事务中迁移所有内容。 或者“testing”迁移并将所有事情都回滚一下,让我知道迁移是否会在没有实际承诺的情况下运行。
编辑
==== ====上下文
我在一个有多个完整堆栈开发人员的环境中工作。 我们在哪里不断添加和改变function。 正因为如此,我们都有自己的数据库。 每个更改都会被编写脚本,以便一旦脚本影响我们的分支或集成分支时,可以将更改应用到数据库。
因为在多台机器之间进行时,每个版本都有多个脚本。
说明每个开发人员必须不断地更新一个给定的文件是不可行的。 将开发机器与分段和生产数据库采用不同的版本scheme也是不明智的。 更不用说这会在合并分支时造成的。
另外在合并时,如果有一个问题已经发挥了剧本的顺序。 整个集合应该回滚,直到可以发生干净的迁移。
我们有我们自己的移植工具,我唯一面临的问题是,它不能在docker工作,我希望不必改变它。
我的意思是用命令行不可能运行每个脚本运行在一个事务中,但是当你创build一个脚本时,你可能运行一个事务。
例如:
-
下载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中configuration
flyway.url=jdbc:h2:file:./foobardb flyway.user=SA flyway.password=
-
在/ sql目录中创build名为Vx__xxxxxx.sql的空迁移
select 1;
-
在一个脚本中创build每个迁移的迁移/ sql Vlast_xxx.sql谁在一个事务中运行。
create table ...; create table ..; create procedure ...;
-
运行迁移
flyway-4.1.2> flyway migrate
在命令之前的docker使用运行,我想你知道。
这只是一个模板,但经过一些修复,可能会很好。