flyway适配高斯数据库

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: flyway适配高斯数据库

flyway适配高斯数据库

  • flyway-core 源码版本:6.2.2 tag

  • 由于高斯和postgresql使用的驱动都是一样的,所以基于flyway支持已有的postgresql数据库来改造

  • 修改点如下:

1、PostgreSQLConnection 类中的 doRestoreOriginalState 方法

  • 方法作用:将数据库连接的角色(role)重置为其原始值,确保在迁移或回调过程中更改的角色被还原回初始状态,在Flyway的设计中,可能会在迁移或回调期间更改数据库连接的角色,以满足特定需求。为了保证不同迁移之间的一致性,当完成迁移或回调时,需要将角色重置为初始状态,以免对后续迁移或操作产生影响

  • 把这个方法体注释掉,经测试高斯和postgresql均无影响。由于 postgresql 和 高斯 之间对设置 role 语法之间的差异,高斯数据库 set 角色时还需要带上密码,而postgresql则不用,如:

postgresql: SET ROLE xxx 
gaussDB: SET ROLE xxx PASSWORD xxx

2、PostgreSQLDatabase 类中的 ensureSupported 方法

  • 方法作用:确保数据库与当前使用的Flyway版本兼容,并提供相应的建议或推荐操作
@Override
public final void ensureSupported() {
   
    // 检查数据库版本不低于 9.0
    ensureDatabaseIsRecentEnough("9.0");
    // 检查数据库是否高于指定版本,并且推荐升级到某个特定的Flyway版本(在6.2.2源码中为9.4版本)。如果数据库版本较旧,并且与所需的Flyway版本不兼容,将给出相应的建议
    ensureDatabaseNotOlderThanOtherwiseRecommendUpgradeToFlywayEdition("9.4", org.flywaydb.core.internal.license.Edition.ENTERPRISE);
    // 检查数据库是否需要升级到指定的主要版本,如果数据库的版本低于指定版本,给出升级Flyway的建议
    recommendFlywayUpgradeIfNecessaryForMajorVersion("12");
}
  • 高斯数据库是基于 postgresql 9.2 改造的,在 flyway 中是不支持的,所以降低源码中给出的版本,否则就会报推荐升级数据库的版本或者使用 Flyway Teams Edition,Flyway Teams Edition 可以支持 postgresql 9.2,这个是企业版要收费的
ensureDatabaseNotOlderThanOtherwiseRecommendUpgradeToFlywayEdition("9.0", org.flywaydb.core.internal.license.Edition.ENTERPRISE);

3、PostgreSQLDatabase 类中的 getRawCreateScript 方法

  • 方法作用:生成创建数据库表的原始SQL脚本字符串,用于存储迁移历史记录,就是生成 flyway_scheme_history
  • 高斯数据库执行时创建 flyway_scheme_history 表会丢失 checksum 的值,导致最后执行不了指定文件夹的脚本语句,把这个方法执行的逻辑调整下
@Override
public String getRawCreateScript(Table table, boolean baseline) {
   

    //todo 这里高斯会创建一条空的baseline记录,调整下执行逻辑
    String tablespace = configuration.getTablespace() == null
        ? ""
        : " TABLESPACE \"" + configuration.getTablespace() + "\"";

    String createTableScript = "CREATE TABLE " + table + " (\n" +
        "    \"installed_rank\" INT NOT NULL,\n" +
        "    \"version\" VARCHAR(50),\n" +
        "    \"description\" VARCHAR(200) NOT NULL,\n" +
        "    \"type\" VARCHAR(20) NOT NULL,\n" +
        "    \"script\" VARCHAR(1000) NOT NULL,\n" +
        "    \"checksum\" INTEGER,\n" +
        "    \"installed_by\" VARCHAR(100) NOT NULL,\n" +
        "    \"installed_on\" TIMESTAMP NOT NULL DEFAULT now(),\n" +
        "    \"execution_time\" INTEGER NOT NULL,\n" +
        "    \"success\" BOOLEAN NOT NULL\n" +
        ")" + tablespace + ";\n";

    if (baseline) {
   
        return createTableScript +
            "ALTER TABLE " + table + " ADD CONSTRAINT \"" + table.getName() + "_pk\" PRIMARY KEY (\"installed_rank\");\n" +
            "CREATE INDEX \"" + table.getName() + "_s_idx\" ON " + table + " (\"success\");";
    } else {
   
        return createTableScript;
    }
}

使用说明:

  1. 源码修改完成后,重新打包,为了不跟本地仓库原有的artifactId坐标有冲突,可以更改 artifactId 为其他名
  1. 其他配置和使用和 postgresql 是一样的
  flyway:
    baseline-on-migrate: true
    # 高斯配置
    url: jdbc:postgresql://xxx:8123/flyway_test
    user: xxx
    password: xxx
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
27天前
|
SQL Java 数据库
Spring Boot与Flyway:数据库版本控制的自动化实践
【10月更文挑战第19天】 在软件开发中,数据库的版本控制是一个至关重要的环节,它确保了数据库结构的一致性和项目的顺利迭代。Spring Boot结合Flyway提供了一种自动化的数据库版本控制解决方案,极大地简化了数据库迁移管理。本文将详细介绍如何使用Spring Boot和Flyway实现数据库版本的自动化控制。
25 2
|
4月前
|
SQL Java 数据库
使用Spring Boot和Flyway进行数据库迁移
使用Spring Boot和Flyway进行数据库迁移
|
2月前
|
SQL Java 数据库连接
数据库迁移不再难:Flyway 与 Liquibase 大比拼,哪个才是你的真命天子?
【9月更文挑战第3天】数据库迁移在软件开发中至关重要,尤其在使用 ORM 框架如 Hibernate 时。为确保部署时能顺利应用最新的数据库变更,开发者常使用自动化工具。Flyway 和 Liquibase 是当前流行的两种选择,均能有效管理数据库版本控制。Flyway 采用 SQL 脚本表示变更,简单易用;Liquibase 支持多种脚本格式,功能更强大,适合复杂项目。本文将对比这两种工具的特点,并通过示例展示各自的优缺点,帮助开发者根据项目需求做出合适的选择。
508 1
|
6月前
|
容灾 Java 数据库
OceanBase数据库常见问题之spring boot应用增加了flyway的依赖但没执行如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
|
Cloud Native 关系型数据库 分布式数据库
富士胶片公司完成阿里云PolarDB数据库开源产品兼容适配
近日,富士胶片(中国)投资有限公司(以下简称富士胶片)与阿里云PolarDB 开源数据库社区展开产品集成认证。测试结果表明,富士胶片旗下富医睿影与阿里云以下产品:开源云原生数据库 PolarDB PostgreSQL 版(V11),完全满足产品兼容认证要求,兼容性良好,系统运行稳定。
|
SQL 数据库 开发工具
真香!flyway数据库版本控制
真香!flyway数据库版本控制
264 0
|
存储 并行计算 Cloud Native
OpenCloudOS开源社区产品完成阿里云PolarDB数据库开源产品兼容适配
近日,OpenCloudOS开源社区签署阿里巴巴开源CLA(Contribution License Agreement, 贡献许可协议), 正式与阿里云PolarDB 开源数据库社区牵手,并展开OpenCloudOS (V8)与阿里云开源云原生数据库PolarDB分布式版、开源云原生数据库PolarDB PostgreSQL 版兼容性适配。
|
SQL Oracle 关系型数据库
SpringBoot + Flyway,自动化实现数据库版本控制
SpringBoot + Flyway,自动化实现数据库版本控制
|
11天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
26 1
|
13天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
下一篇
无影云桌面