【问题标题】:How to specify initSQL in Flyways command line tool?如何在 Flyways 命令行工具中指定 initSQL?
【发布时间】:2016-10-25 01:14:28
【问题描述】:

Flyway 的 Java API 提供了指定 SQL 语句的功能,这些语句在与目标数据库建立连接后立即执行(通过 Flyway.setDatasource => javadoc)。此类 SQL 的典型用例是会话初始化。

Flyway flyway = new Flyway();

// datasource with initilization SQL 
flyway.setDataSource(url, user, password, initSQL);

flyway.setLocations("sql/migrations");
flyway.migrate();

我想知道 Flyway 的命令行工具中是否没有类似的功能。我已经浏览了https://flywaydb.org/documentation/commandline/ 提供的官方文档资源,但我没有找到实现此目的的方法。

【问题讨论】:

    标签: flyway


    【解决方案1】:

    目前尚不支持。请在 Flyway 问题跟踪器中提交功能请求。

    【讨论】:

    • 阿克塞尔,感谢您的反馈。我在 Flyway 问题跟踪器中创建了功能请求 #1324
    【解决方案2】:

    如果您希望 Flyway 在您的 Java 应用程序中执行脚本,那么起点就像以下示例代码一样简单

    Flyway flyway = new Flyway();
    
    // Set the data source
    flyway.setDataSource(dataSource);
    
    // Where to search for classes to be executed or SQL scripts to be found
    flyway.setLocations("net.somewhere.flyway");
    
    flyway.setTarget(MigrationVersion.LATEST);
    flyway.migrate();
    

    文档的起点在这里

    https://flywaydb.org/documentation/migration/java
    

    【讨论】:

    • 好吧,感谢您的评论,但我实际上是在询问 Flyway 的命令行工具,而不是 Flyway Java API。我需要初始化 Flyway 用来应用迁移的数据库会话(例如 ALTER SESSION set ...)...
    • LOL,那么链接到 Java 文档可能不是一个好主意 :) 我会尝试在另一个答案中回答这个问题。
    【解决方案3】:

    原始发布者在对另一个答案的评论中表达了他们想要做的事情。

    你需要开始的手册部分可以在这里找到

    https://flywaydb.org/documentation/commandline/

    这详细说明了如何创建配置文件,该文件将为 Flyway 的命令行版本提供正确的数据库连接详细信息,以允许其运行迁移脚本。

    不清楚为什么您需要能够在 Flyway 建立连接后使用 DDL 语句(例如 ALTER SESSION),因为应该使用已定义的正确模式创建连接。连接后更改架构将导致 Flyway 问题,因为它定义了一个表,在该表中跟踪每个架构的更改。因此,如果您希望对多个模式进行更改,FAQ 中的“Flyway 是否支持多个模式?”标题下列出了一些策略

    https://flywaydb.org/documentation/faq
    

    【讨论】:

    • 如何提供Flyway参数来创建数据库连接已经很清楚了。问题是关于将 Flyway 与 Java API 一起使用时可用的功能,但显然在将 Flyway 与命令行工具一起使用时不可用。我想我最初的问题不够清楚,这就是我编辑原始帖子的原因。为混乱道歉 ;-)
    【解决方案4】:

    我还在为命令行 flyway 寻找类似初始 sql 的东西。 就我而言,我需要这样做

    ALTER SESSION SET NLS_LANGUAGE= 'ENGLISH';
    

    当我在波兰工作并开始收到波兰语的 ORA 错误时,这不是我的母语:) 我决定在这里分享它,因为它总是以本地语言显示错误消息,因为它可能很有用。

    之前的错误信息(波兰语)

    迁移 V-1.0.0.27__add stg_trading_book_seq .sql 失败

    SQL 状态:42000 错误代码:955 消息:ORA-00955: nazwa jest już używana przez istniejący obiekt

    之后

    迁移 V-1.0.0.27__add stg_trading_book_seq .sql 失败

    SQL 状态:42000 错误代码:955 消息:ORA-00955:名称已被现有对象使用

    那么对我有什么帮助 我将 JVM 参数 -Duser.language=en 放到 flyway.cmd(对于 linux 只是 flyway)在根 flyway 文件夹中

    %JAVA_CMD% -cp "%INSTALLDIR%\lib\*;%INSTALLDIR%\drivers\*" -Duser.language=en org.flywaydb.commandline.Main %*
    

    【讨论】:

      猜你喜欢
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      相关资源
      最近更新 更多