关于使用schema_version表的Flyway 5.0.7警告

Ton*_* C. 13 database-migration flyway

我们使用Flyway Gradle插件离线进行迁移(即我们在系统关闭时进行迁移).我们最近升级到了Flyway 5.0.7,我们现在看到此警告用于迁移:

找不到架构历史表XXXXXXX.flyway_schema_history,但发现XXXXXXX.schema_version代替.您正在看到此消息,因为Flyway将版本5.0.0中的flyway.table的默认值更改为flyway_schema_history,您仍然依赖于旧的默认值(schema_version).在配置中设置flyway.table = schema_version以解决此问题.Flyway 6.0.0中将删除此回退机制.

(我使用XXXXXXX来模糊实际的模式名称).

因此,似乎我们可以通过设置flyway.table = schema_version来避免错误.但是,它还表示将在Flyway 6.0.0中删除此机制.

我们应该做些什么来使这种兼容性向前发展吗?我们是否必须手动将schema_version表重命名为flyway_schema_history?或者有没有办法让Flyway做到这一点?如果没有,当Flyway 6.0.0问世时会发生什么?它会自动将数据迁移到适当的表名吗?

Mon*_*mul 18

默认值flyway.table已更改schema_versionflyway_schema_history.并且他们还提供了自动回退到旧默认值并发出警告,以避免使用旧的默认设置破坏现有安装.

它从飞路5意味着,如果不指定flyway.table配置文件中的财产,然后飞行路线将查找表flyway_schema_history以dB为单位,如果没有发现它会查找表schema_version作为备用,如果旧表被找到,那么将发出警告随着你现在得到的消息.从第6道,这个后备机制将被删除.如果你不提供flyway.table属性,它将flyway_schema_history在db中查找,如果没有找到它,schema_version即使你有任何表也不会查找表,并且将创建一个名为flyway_schema_history维护功能的新表.

在第6道路中,如果设置了现有系统将正常运行flyway.table=schema_version,则无需在db中更改表名.但是如果你没有设置属性,那么你必须要更改表名,否则flyway将无法识别现有的schema_version表,将系统视为新的,将创建flyway_schema_history表并将从start开始执行脚本.

希望它会有所帮助.

  • 是否有一种简单的方法让Flyway重命名它? (5认同)
  • Flyway 有关于此的官方文档吗? (2认同)

Rom*_*nko 5

在 PostgreSQL 上,我只通过一次迁移就解决了这个问题:

DO $$
  BEGIN
    IF (EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'schema_version')
        AND EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'flyway_schema_history'))
    THEN
        DROP TABLE schema_version;
    END IF ;
    IF (EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'schema_version')
        AND NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'flyway_schema_history'))
    THEN
        CREATE TABLE flyway_schema_history AS TABLE schema_version;
    END IF ;
  END
$$ ;
Run Code Online (Sandbox Code Playgroud)

它实际上分两个阶段工作:

  • 第一次重新启动时,它会复制历史记录,并将迁移记录到“旧”历史表中。
  • 第二次重新启动时,它会删除旧的历史记录表。现在,移民进入了“新”历史,一切都结束了。