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

How to specify initSQL in Flyways command line tool?

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 从您的 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

发帖人在对另一个答案的评论中表达了他们正在尝试做的事情。

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

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

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

不清楚为什么您需要能够在 Flyway 建立连接后使用 ALTER SESSION 等 DDL 语句,因为应该使用已定义的正确模式创建连接。连接后更改架构将导致 Flyway 问题,因为它定义了一个 table,它在其中跟踪每个架构的更改。因此,如果您希望更改多个模式,FAQ 中的标题 "Does Flyway support multiple schemas?"

中列出了一些策略
https://flywaydb.org/documentation/faq

暂不支持。请在 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 文件夹 flyway.cmd(对于 linux 只是 flyway)

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