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_version为flyway_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开始执行脚本.
希望它会有所帮助.
在 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)
它实际上分两个阶段工作:
| 归档时间: |
|
| 查看次数: |
6022 次 |
| 最近记录: |