【问题标题】:flywaydb: How to stop accidently cleanflywaydb:如何停止意外清理
【发布时间】:2014-12-31 21:48:36
【问题描述】:

在 Flyway Db 内部有一个名为“clean”的命令,如果我们使用它将删除模式中的所有对象。

删除配置模式中的所有对象(表、视图、过程、触发器...)。 架构按照 schemas 属性指定的顺序进行清理。

我们如何禁用此功能,以便在需要之前不会有人意外使用它?

【问题讨论】:

    标签: flyway


    【解决方案1】:

    命令行的最佳选择是用你自己的封装 Flyway 的脚本。然后你可以拦截 clean 命令并且不执行它。

    【讨论】:

    • 我要走的路线。正如Chaya 的回答所指出的那样(单点真实的人),我宁愿不让我控制我的数据库。包装脚本可以与一些配置相结合,例如开发、测试、登台(允许清理)和生产(不允许清理)模式列表。
    • Flyway 有一个 cleanDisabled 选项:flywaydb.org/documentation/gradle/clean
    【解决方案2】:

    最简单的方法是管理数据库的权限并拒绝对 flyway 用户的删除操作。

    如果您不掌握数据库配置和使用 java Api,您可以编写一个 Aspect 以在以下切入点“execution(public * org.flywaydb.core.Flyway.clean (..)"(未测试)

    【讨论】:

    • 但是我只在默认命令行下工作,有没有办法从那里开始执行合并语句,与正常的 AQT 执行相比,我可以看到许多错误,因为在那里工作正常......
    • 所以唯一的办法就是管理数据库用户的权限,以拒绝drop指令。
    【解决方案3】:

    jrf 的评论更有用,将其添加为答案。

    您可以针对不同的环境使用不同的 flyway.conf 文件并设置 flyway.cleanDisabled= true/false

    使用带有配置文件选项的 flyway 命令:
    示例 > flyway -configFile=path/to/myAlternativeConfig.conf clean

    现在,这应该可以让您拥有使用 clean 的分离性和灵活性。就像您可以在开发环境中启用 clean 并在 prod 上禁用它一样。

    【讨论】:

      【解决方案4】:

      在 4.0 版本中,您可以通过设置 cleanDisabled 标志来禁用清理。

      在 pom 中

       <cleanDisabled>false</cleanDisabled>
      

      参考 https://flywaydb.org/documentation/maven/clean

      https://github.com/flyway/flyway/issues/458

      【讨论】:

        猜你喜欢
        • 2012-01-29
        • 2015-05-11
        • 2019-11-13
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        • 2018-09-07
        • 1970-01-01
        相关资源
        最近更新 更多