Flyway条件数据库迁移

时间:2017-02-21 11:12:28

标签: oracle database-migration flyway

我正在尝试使用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文件夹的脚本,但是如果我应用于customer1脚本,则不应应用V1.0(创建表TAB1)。 取而代之的是V1.0__create_view_TAB1_to_schema1.sql

我如何处理这种情况?

1 个答案:

答案 0 :(得分:3)

使用以下结构:

└── 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");
  • customer1表: flyway.setLocations("filesystem:sql/sql_common", "filesystem:sql/sql_customer1");
  • 的customer2: flyway.setLocations("filesystem:sql/sql_common", "filesystem:sql/sql_customer2");

这种情况下,每个案例只有1个迁移,v1.0。