【问题标题】:How to store Flyway H2 migrations' history in another schema than PUBLIC?如何将 Flyway H2 迁移的历史记录存储在 PUBLIC 之外的另一个模式中?
【发布时间】:2015-10-17 14:42:18
【问题描述】:

将 Flyway 与 H2 数据库结合使用,我可以立即使用存储在 PUBLIC.schema_version 中的所有 SQL 架构迁移历史记录。

我想将此表存储在专用的 SQL 模式 FLYWAY 中,例如:FLYWAY.history

这样做的原因是为了在打开 PUBLIC 表时不从视觉上污染 H2 控制台,并避免任何命名空间冲突。

通过修改flyway.table属性,可以更改历史表的名称。

但是使用flyway.table=FLYWAY.history 不起作用。未创建架构 FLYWAY,而是创建了表 PUBLIC.'FLYWAY.history'

应该如何调整 Flyway 配置以达到预期效果?

【问题讨论】:

    标签: java h2 flyway


    【解决方案1】:

    提供此属性可以部分解决问题:flyway.schemas=FLYWAY,PUBLIC

    通过这样做,历史表将存储在架构 FLYWAY 中,但默认情况下所有迁移都将在此架构上运行。

    请参阅http://flywaydb.org/documentation/commandline/migrate.html 并查找架构以了解更多详细信息。

    我发现这种方法有 2 个问题,可以通过细微的调整来解决。

    第 1 期:

    在任何 Flyway 迁移尝试之前,架构 FLYWAY 必须存在。这可以在 java 中使用stmt.execute("CREATE SCHEMA IF NOT EXISTS FLYWAY"); 完成并在迁移前关闭数据库

    第二期:

    默认情况下,所有迁移都将在架构 FLYWAY 上运行。 这可以通过修改每个 SQL 迁移文件以专门指向 PUBLIC 模式来解决。然后每个文件将包含以下语句:create table PUBLIC.PERSON (...);

    我已经解决了手头的问题,但我对修复和额外的手动工作并不完全满意。希望有人能提供更好的答案(更原生的方式)和更少的调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 2011-06-30
      • 2014-01-03
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多