当前位置: 首页 > 知识库问答 >
问题:

如何使用flyway在一次迁移中处理多个模式

公冶鸣
2023-03-14

我对Flyway完全陌生,但我正在尝试使用https://github.com/flyway/flyway-docker描述的docker-compose flyway mysql安排来迁移许多相同的测试数据库

据我所知,< code>migrate命令可以在它的< code>-schemas参数中接受多个模式,但是它似乎只将实际的SQL迁移应用于列表中的第一个模式。

例如,当我使用< code>schemas=test_1,test_2,test_3运行migrate时,flyway会创建所有三个数据库,但只在第一个< code>test_1数据库上创建迁移文件中指定的表。

有没有办法将SQL迁移文件应用于列表中的所有模式?

共有2个答案

夏侯林
2023-03-14

对我来说,有效的方法是将我的迁移分解到我的docker-compose文件和docker-PostgreSQL-multiple-databases中的单独执行中,如下所示:

version: '3.8'
services:
  postgres-db:
    image: 'postgres:13.3'
    environment:
      POSTGRES_MULTIPLE_DATABASES: 'customers,addresses'
      POSTGRES_USER: 'pocketlaundry'
      POSTGRES_PASSWORD: 'iceprism'
    volumes:
      - ./docker-postgresql-multiple-databases:/docker-entrypoint-initdb.d
    expose:
      - '5432' # Publishes 5432 to other containers (addresses-flyway, customers-flyway) but NOT to host machine
    ports:
      - '5432:5432'

  addresses-flyway:
    image: flyway/flyway:7.12.0
    command: -url=jdbc:postgresql://postgres-db:5432/addresses -schemas=public -user=pocketlaundry -password=iceprism -connectRetries=60 migrate
    volumes:
      - ./sports-ball-project/src/test/resources/db/addresses/migrations:/flyway/sql
    depends_on:
      - postgres-db
    links:
      - postgres-db

  customers-flyway:
    image: flyway/flyway:7.12.0
    command: -url=jdbc:postgresql://postgres-db:5432/customers -schemas=public -user=pocketlaundry -password=iceprism -connectRetries=60 migrate
    volumes:
      - ./sports-ball-project/src/test/resources/db/customers/migrations:/flyway/sql
    depends_on:
      - postgres-db
    links:
      - postgres-db
华景同
2023-03-14

我将把这个问题留在这里,以防有人仍然可以回答如果迁移文件未应用于列表中的所有数据库,则多个架构如何有用。但是,我能够通过覆盖飞行路线入口点命令来处理 docker 撰写中的多个数据库。

所以现在我的docker-compose服务看起来像:

services:
  flyway:
    image: flyway/flyway:6.1.4
    volumes:
      - ./migrations:/flyway/sql
    depends_on:
      - db
  entrypoint: ["bash"]
  command: > -c "/flyway/flyway -url=jdbc:mysql://db -schemas=test1 migrate;
                 /flyway/flyway -url=jdbc:mysql://db -schemas=test2 migrate"
 类似资料:
  • 我目前正在研究Flyway作为Liquibase的替代方案,但在文档中无法找到以下问题的答案: 假设在生产环境中部署后发现迁移包含错误。回想起来,不应该按原样执行,但已经太晚了。但是,我们想用固定版本的替换迁移,这样从头开始填充的数据库就不会遭受相同的错误。 在 Liquibase 中,您将修复原始变更集并使用

  • 如何管理处理相同数据库模式的多个项目。如果被另一个项目修改,每个项目中的Flyway迁移脚本不允许启动。 例如: 我有一个带有FlywayInitializer类的spring boot项目X。 我有一个子模块Y,还有他自己的FlywayInitializer类 项目结构: 如何对项目X和Y使用与Flyway相同的schemaname“schema1”? 编辑:谢谢@jesper\u bk对我的帮

  • 问题内容: 如何管理处理同一数据库模式的多个项目。如果每个项目中的Flyway迁移脚本被另一个项目修改,则不允许启动。 例如: 我有一个带有FlywayInitializer类的Spring Boot ProjectX。 我有一个子模块Project Y,也有他自己的FlywayInitializer类 项目结构: 如何在Flyway中为Project X和Y使用相同的架构名称“ schema1”

  • 我有一个关于Flyway DB迁移的问题。如何管理处理同一数据库模式的多个项目(微服务)。如果每个项目中的Flyway移植脚本被其他项目修改,则不允许启动该脚本。他们是否有相关的文档或最佳实践?

  • 问题内容: MyBatis迁移将每个SQL文件分为两部分: 一种用于向前迁移一个版本 一种用于迁移回一个版本 如何使用Flyway回滚版本? 问题答案: 尽管Flyway支持回滚(仅作为商业功能),但不鼓励使用它: https://flywaydb.org/documentation/command/undo 尽管撤消迁移的想法很好,但不幸的是,有时它在实践中会崩溃。一旦您进行了破坏性的更改(删除

  • 早上好,我正在尝试使用flyway、hibernate、panache和多租户设置一个QUARKUS项目。但是脚本只在第一个模式上运行一次,有人知道如何在其他模式上运行吗? 应用程序. yml .LOG 我的路径路径 如您所见,它仅在第一个架构中运行。如何在这三者上运行? Obs。:对不起,我的英语不好!:)