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

Flyway:是否有一种基于动态条件(sql条件)有条件地应用脚本的方法?

况庆
2023-03-14

我们公司的一些团队目前正在“升级”一些遗留项目以使用Flyway。一个问题是存在多个具有已可用数据库对象(基线)的安装。

我们目前有一个用例(将来肯定会有更多),我们必须创建一些新的迁移脚本,但它们只能在满足数据库当前状态的特定条件时运行。

例如:运行此脚本,但仅当数据库中的表 X 包含数据 Y 时

我已经看到了Flyway条件数据库迁移,但对我来说,这似乎不是正确的解决方案,因为条件不仅仅是一些静态环境。是否应该执行迁移的条件应该取决于数据库的当前活动状态。

我本人对Flyway没有多少经验,但对Liquibase更有经验。我会这样实现它:

 <preConditions onFail="WARN"> 
    <sqlCheck expectedResult="0">select count(*) from oldtable</sqlCheck> 
 </preConditions>

Flyway里有等价物吗?

共有1个答案

颜英博
2023-03-14

据我所知,不,Flyway本身不能执行这种条件语句。但是,由于flyway只是按顺序运行脚本,所以将条件命令放在部署脚本中就可以了。Flyway只是执行脚本,所以它们可以根据您的需要进行定制。

 类似资料:
  • 我正在构建一个ReactJS应用程序,我有一个在点击后调用的函数,但是我希望只有当屏幕宽度大于1200px时才会触发这个点击事件。 例如,在下面的代码中,我在元素中添加了一个事件,我想防止在屏幕宽度小于1200px时触发此。 有没有一种不使用监听器的方法可以做到这一点? 我知道我可以使用一个监听器并设置一个条件来确定是否会监听该事件;我还知道我可以在函数中设置条件,并阻止执行逻辑;我还可以创建两个

  • 我想有条件地显示和隐藏这个按钮组,这取决于从父组件传递的内容,看起来像这样: .... .... 然而,{this.props.showBulkActions'show':'hidden'并没有发生任何事情。我做错什么了吗?

  • 我有如下代码: 在我的属性文件中,我有: 这不起作用,parseFooBar在第一秒每分钟都被执行。 但是,如果我添加字段: 所以我可以做一个日志,看看它是什么,parseFooBar不会被执行。移除注入的字符串会再次看到parseFooBar执行。我做错了什么? 编辑:这是使用Spring 4.1.5,Spring Boot 1.2.1和JDK 8 编辑2:将注释移动到类型也有效。(无需强制使用

  • 问题内容: 我是bash的新手,但我一直想尝试取消以下命令: 如果我已连接到互联网,则此条件返回true。我希望它以相反的方式发生,但是放在任何地方似乎都行不通。 问题答案: 您可以选择: 分别反转以下表达式的返回值。

  • 问题内容: 我想基于从客户端传递的String参数注入一个bean。 我希望基于传递的参数注入报表实例。任何帮助将不胜感激。提前致谢 问题答案: 使用工厂方法模式: 当您使用以下命令调用控制器时,Spring可以创建报告类型: 但是,它非常笨拙,并且每次添加新报告类型时都需要进行修改。如果报告类型列表已修复,则可以。但是,如果您计划添加越来越多的类型,这将是一个更可靠的实现: 通过此实现,添加新的

  • 我有一些代码使用聚合物属性e <代码> polymer的工作方式是,我不能简单地说<code>force-shorrow=“false”,如果我想禁用该属性,必须将其完全删除。在Angular2中是否有方法有条件地删除整个属性?我似乎找不到关于这个话题的任何信息。我可以使用并重复整个元素,包括属性和不包括属性,但如果可能的话,我宁愿不这样做。谢谢 编辑 - 为什么将此问题标记为重复并关闭?我在有问