加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 一个模式中的Flyway多个元数据表

发布时间:2020-12-13 16:29:45 所属栏目:百科 来源:网络整理
导读:我正在尝试使用Flyway来模拟模块化应用程序的数据库.每个模块都有自己独立的表集和迁移脚本,这些脚本将控制该组表的版本控制. Flyway允许我为每个模块指定不同的元数据表 – 这样我就可以独立地对每个模块进行版本化.当我尝试升级应用程序时,我为每个模块运
我正在尝试使用Flyway来模拟模块化应用程序的数据库.每个模块都有自己独立的表集和迁移脚本,这些脚本将控制该组表的版本控制.

Flyway允许我为每个模块指定不同的元数据表 – 这样我就可以独立地对每个模块进行版本化.当我尝试升级应用程序时,我为每个模块运行一个迁移过程,每个模块都有自己的表和一组脚本.请注意,这些表都在同一模式中.

但是,当我尝试迁移我的应用程序时,第一次迁移是唯一有效的迁移.后续迁移失败,出现以下异常:org.flywaydb.core.api.FlywayException:找到没有元数据表的非空模式“public”!使用baseline()或将baselineOnMigrate设置为true以初始化元数据表.

如果我手动为每个模块创建元数据表,则每个模块的迁移都可以正常工作.自己创建表而不是让Flyway为我创建它似乎是一个解决问题的黑客,而不是解决方案本身.

这是一种独立管理多组表的有效方法,还是有更好的方法可以做到这一点?这是自己创建元数据表的有效方法吗?

理想的解决方案是将模块拆分为模式.这为每个模块提供了一个有效的隔离单元,也非常适合模块化应用程序(模块完全隔离和自我管理),而不是将所有内容都转储到单个模式(尤其是公共模式)中.例如
application_database
    ├── public
    ├── module_1
    │ ├── schema_version
    │ ├── m1_t1
    │   └── m1_t2
    ├── module_2
    │ ├── schema_version
    │ ├── m2_t1
    │   └── m2_t2
    ...

您的第二个选择是继续使用公共模式来托管所有表,但是为每个schema_version使用单独的模式.这不是重构努力,但肯定不如上面提到的优雅设计.例如

application_database
    ├── public
    │ ├── m1_t1
    │   ├── m1_t2
    │ ├── m2_t1
    │   └── m2_t2
    ├── module_1
    │ └── schema_version
    │
    ├── module_2
    │ └── schema_version
    ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读