如何在Flyways命令行工具中指定initSQL?

时间:2016-05-24 13:00:33

标签: flyway

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/提供的官方文档资源,但我找不到实现此目的的方法。

4 个答案:

答案 0 :(得分:0)

如果您希望让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

答案 1 :(得分:0)

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

您可以在此处找到您需要开始的手册部分

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

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

目前尚不清楚为什么一旦Flyway有连接就需要能够使用ALTER SESSION之类的DDL语句,因为应该已经使用已定义的正确模式创建了连接。连接后更改架构将导致Flyway问题,因为它定义了一个表,它跟踪每个架构的更改。因此,如果您希望对多个模式进行更改,则常见问题解答中列出的策略标题为“Flyway是否支持多个模式?”

x('A')

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我也在寻找像命令行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:nazwajestjużużywanaprzezistniejącyobiekt

迁移V-1.0.0.27__add stg_trading_book_seq .sql失败

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

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

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