【问题标题】:Found non-empty schema(s) "public" but no schema history table. Use baseline() or set baselineOnMigrate to true to initialize the schema history table找到非空架构 \"public\" 但没有架构历史记录表。使用 baseline() 或将 baselineOnMigrate 设置为 true 来初始化架构历史表
【发布时间】:2022-08-22 14:51:09
【问题描述】:

我知道以前有人问过这个问题,但我在这里绕圈子......

我有一个 postgres 14 数据库和一个运行 flyway-db:7.13.0 和 flyway-core:8.5.10 的 Springboot 应用程序

我正在使用 RDS。我使用 root 帐户手动创建了一个新数据库。当我运行我的 springboot 时,我的 flyway 迁移失败并出现错误

找到非空架构 \"public\" 但没有架构历史记录表。使用baseline() 或将baselineOnMigrate 设置为true 来初始化模式历史表。

我理解发生这种情况的原因,但是当我将baselineVersion 和baselineOnMigrate 添加到我的flyway gradle 配置中时,它仍然不起作用。我什至添加了

flyway {
        url = dbUrl
        user = dbUser
        password = dbPassword
        schemas = [\'public\']
        baselineVersion = \'0.0\'
        baselineOnMigrate = true
        locations = [\"filesystem:${dbMigrationPath}\"]
       }

我还添加了

  spring.flyway.baseline-on-migrate = true

到我的 application.properties

最让我困惑的是,如果我以 root 用户启动指向默认 postgres 数据库的应用程序。迁移工作并创建了飞行路径历史表。但是当我运行它指向新创建的数据库时它不起作用。

任何想法?

  • 在我的情况下添加spring.flyway.baseline-on-migrate=true 修复了它。谢谢!

标签: postgresql spring-boot gradle flyway


【解决方案1】:

我想到了。原来我需要将baselineOnMigration 标志添加到我的配置中

Flyway.configure().baselineOnMigrate(true).dataSource(new TransactionAwareDataSourceProxy(dataSource)).load();

【讨论】:

    【解决方案2】:

    对没有架构历史的非空架构执行迁移时是否自动调用基线 桌子。然后,在执行迁移之前,将使用 baselineVersion 初始化此架构。 然后只会应用高于baselineVersion 的迁移。 这对于在具有现有数据库的项目上进行初始 Flyway 生产部署很有用。 启用此功能时要小心,因为它消除了确保 Flyway不会在配置错误的情况下迁移错误的数据库! (默认:假)

    flyway.baselineOnMigrate=
    
    flyway.baselineOnMigrate=true
    

    我在上面的语句下添加了 flyway.baselineOnMigrate=true 并且它起作用了。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2010-11-30
    • 2016-03-19
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多