在线网站生成器,wordpress要用什么代码,市场营销七大策略,互联网+文章目录 flyway适配高斯数据库 flyway适配高斯数据库 flyway-core 源码版本#xff1a;6.2.2 tag 由于高斯和postgresql使用的驱动都是一样的#xff0c;所以基于flyway支持已有的postgresql数据库来改造 修改点如下#xff1a;
1、PostgreSQLConnection 类中的 doRest… 文章目录 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 xxx2、PostgreSQLDatabase 类中的 ensureSupported 方法
方法作用确保数据库与当前使用的Flyway版本兼容并提供相应的建议或推荐操作
Override
public final void ensureSupported() {// 检查数据库版本不低于 9.0ensureDatabaseIsRecentEnough(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 EditionFlyway 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;}
}使用说明 源码修改完成后重新打包为了不跟本地仓库原有的artifactId坐标有冲突可以更改 artifactId 为其他名 其他配置和使用和 postgresql 是一样的 flyway:baseline-on-migrate: true# 高斯配置url: jdbc:postgresql://xxx:8123/flyway_testuser: xxxpassword: xxx