【问题标题】:Flyway conditional db migrationFlyway 条件数据库迁移
【发布时间】:2017-07-10 23:33:25
【问题描述】:

我正在尝试使用flyway,但我有一个不知道如何解决的场景:

当我应用 STANDARD 脚本时,我必须运行 V1.0__create_table_TAB1.sql 当我将脚本应用到 customer1 时,TAB1 表是一个视图,因此我必须运行 V1.0__create_view_TAB1_to_schema1.sql。

实际上:

└── sql
     ├── sql_common
     │   ├── V0.0 __.... sql
     │   └── V1.0__create_table_TAB1.sql
     ├── sql_customer1
     │   └── V1.0__create_view_TAB1_to_schema1.sql
     └── sql_customer2
         └── V1.0__create_view_TAB1_to_schema2.sql

应该总是应用sql_common 文件夹的脚本,但是V1.0(创建表TAB1),如果我应用到customer1 脚本不应该应用。 取而代之的是应用V1.0__create_view_TAB1_to_schema1.sql

我怎样才能防止这种情况发生?

【问题讨论】:

    标签: oracle database-migration flyway


    【解决方案1】:

    使用以下结构:

    └── sql
         ├── sql_common
         │   └── V0.0 __.... sql
         ├── sql_regular
         │   └── V1.0__create_table_TAB1.sql
         ├── sql_customer1
         │   └── V1.0__create_view_TAB1_to_schema1.sql
         └── sql_customer2
             └── V1.0__create_view_TAB1_to_schema2.sql
    

    结合 Flyway.setLocations()。

    • 常规:flyway.setLocations("filesystem:sql/sql_common", "filesystem:sql/sql_regular");
    • 客户1: flyway.setLocations("filesystem:sql/sql_common", "filesystem:sql/sql_customer1");
    • 客户2: flyway.setLocations("filesystem:sql/sql_common", "filesystem:sql/sql_customer2");

    这样,每个案例将恰好有 1 个 v1.0 迁移。

    【讨论】:

      猜你喜欢
      • 2013-03-06
      • 2014-08-02
      • 2017-09-06
      • 2015-02-17
      • 2015-12-19
      • 2018-11-26
      • 1970-01-01
      • 2013-08-10
      • 2017-10-30
      相关资源
      最近更新 更多