Flyway multiple metadata tables in one schema

前端 未结 2 1669
长发绾君心
长发绾君心 2020-12-16 19:19

I\'m trying to use Flyway to version the database of a modular application. Each module has its own separate set of tables, and migration scripts that will control the versi

相关标签:
2条回答
  • 2020-12-16 19:40

    An ideal solution for you would be to split your modules into schemas. This gives you an effective unit of isolation per module and is also a natural fit for modular applications (modules completely isolated and self managing), rather than dumping everything into a single schema (especially public). eg

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

    Your second option is to remain using the public schema to host all tables, but use an individual schema for each schema_version. This is less refactoring effort but certainly a less elegant design than that mentioned above. eg

    application_database
        ├── public
        │   ├── m1_t1
        │   ├── m1_t2
        │   ├── m2_t1
        │   └── m2_t2
        ├── module_1
        │   └── schema_version
        │
        ├── module_2
        │   └── schema_version
        ...
    
    0 讨论(0)
  • 2020-12-16 19:53

    I think you need to baseline each module before performing the migrate. You'll need to pass the table option to override schema_version for each module eg flyway.table=schema_version_module1. As the error message suggests you can also baselineOnMigrate however that is warned against in the docs (https://flywaydb.org/documentation/commandline/migrate).

    We are considering a similar approach with another schema_version table to apply and log data fixes that cannot be rolled out to every environment cleanly.

    0 讨论(0)
提交回复
热议问题