Flyway 条件数据库迁移
Posted
技术标签:
【中文标题】Flyway 条件数据库迁移【英文标题】:Flyway conditional db migration 【发布时间】: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
我怎样才能防止这种情况发生?
【问题讨论】:
【参考方案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 迁移。
【讨论】:
以上是关于Flyway 条件数据库迁移的主要内容,如果未能解决你的问题,请参考以下文章