• flyway baseline-version


    背景

    使用flyway进行数据库版本控制。

    问题

    flyway配置

        # 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
        baseline-on-migrate: true
        # 开始执行基准迁移时对现有的schema的版本打标签,默认值为1
        baseline-version: 1.0.0
    
    • 1
    • 2
    • 3
    • 4

    产品初始化部署时,flyway等待pgsql数据库运行后,连接数据库执行初始化脚本。
    初始化脚本序号为

    • V1.0.0__init_data.sql
    • V1.0.1__create_test.sql
    • V1.0.2__create_cloud.sql

    但是在flyway pod 启动后 创建flyway_schema_history表并自动插入了一条version=1.0.0 and type=BASELINE的记录。导致实际的V1.0.0__init_data.sql表数据不执行,直接执行V1.0.1__create_test.sql脚本了。
    多次重装初始化测试一直搞不清楚为什么有时候创建flyway_schema_history表时自动插入 type=BASELINE的记录,有时候不插入。
    在这里插入图片描述

    原因

    经过多次重装初始化慢慢发现,每次自动插入记录的时候,数据库里有其他程序创建的表(有时候在flyway执行之前已经创建完成)。而这个开启基准迁移的参数为true。
    baseline-on-migrate: true
    表示只有当前数据库中存在其他表时会自动插入 baseline-version: 1.0.0 指定的版本,从而绕过V1.0.0版本的初始化sql。

    解决

    1. 其他程序不创建表,交给flyway创建。
    2. 产品初始化部署时,baseline-version 改成比初始化脚本的版本小。这样,所有初始化脚本都能执行。
  • 相关阅读:
    SpringCloud 微服务全栈体系(三)
    寄存器与ROM与RAM
    蓝桥杯物联网_STM32L071_2_继电器控制
    穿越周期的强者:打造“第二招牌”是战略共性
    【CTR排序】多任务学习之MMOE模型
    windows上Qt5.15+openssl1.1.1+msvs2022静态编译32位版本的笔记
    Servlet生命周期
    CentOS7 离线部署 Python 项目
    网络编程实战(二)
    MySQL的存储过程
  • 原文地址:https://blog.csdn.net/ledrsnet/article/details/127795793