人大金仓kingbase适配高斯数据库

  • 数据库脚本适配
    • 高斯数据库模式
      高斯数据库在创建数据库时可以指定兼容的数据库类型,可以指定A、B、C、PG,分别表示兼容Oracle、MySQL、Teradata(TD)和PostgreSQL。默认使用A兼容类型。
      高斯数据库在设置PG模式下大部分是兼容人大金仓语法的。但是一些函数,触发器之类的语法基本都是要参考oracle的。

  • 数据库脚本初始化

        在金仓导出的表语句需要适配才能导入到高斯数据库中,具体需要修改以下信息:

  1. 去掉”模式名”. (去掉表模式名)
  2. 替换CHARACTER VARYING 为 varchar
  3. 替换 byte) 为 )
  4. 替换 char) 为 )
  5. 去掉初始脚本前33行之前的内容(内容到第一个创建表语句开始)
  6. 删除 -- 开头的注释。(notepad可以通过正则-- .*?(?=\n)替换)
  7. 删除"Public".
  8. (重置序列的语法)删除sys_catalog.

        索引sql语法需要单独处理,执行的时候仅替换索引文件sql

        1.通过正则进行替换(两种类型都需要替换)

                CREATE INDEX (\w+) ON (\w+) USING

                CREATE INDEX \1 ON "\2" USING

                CREATE UNIQUE INDEX (\w+) ON (\w+) USING

                CREATE UNIQUE INDEX \1 ON "\2" USING

        2.替换USING BTREE ( 为 ("

        3.替换); 为");

        4.替换, 为 ", "

        高斯数据库导入的sql如果不加双引号的情况下默认是小写,并且大小写不敏感,如果加双引号,就大小写敏感。所以需要替换所有的双引号,但是项目中个别封装的程序,对字段进行了加引号操作,所以也要注意适配。

        通过正则去掉双引号的时候要注意,不能把数据库表中存的数据的双引号去掉。要把插入数据和表结构分开对数据进行处理。

  1. 通过正则进行去掉双引号:\"(.*?)\"  替换为 \1
  2. WORKER_NODE表中设计到的id字段需要加双引号并且大写(雪花算法用到的表)
  3. 字段中如果使用form关键字也需要加引号

        触发器的脚本需要按照oracle语法进行适配。(主要涉及xxl定时应用的触发器语法适配)。

二、项目中的语法适配

在pg模式中 大部分是兼容金仓语法的,不过一些个别的函数,需要根据oracle语法进行适配。目前项目中涉及到需要修改的语法:

2.1、sql中涉及的if语法需要适配:

示例:

<if test="_databaseId == 'kingbase'">
    IF(matter_type = 'jg', 'case_concert_examine_jg', 'case_concert_examine_zf') AS type ,
</if>
<if test="_databaseId == 'postgresql'">
    CASE
    WHEN matter_type = 'jg' THEN 'case_concert_examine_jg'
    ELSE 'case_concert_examine_zf'
    END AS type ,
</if>

<if test="_databaseId == 'kingbase'">
    IF(matter_type = 'jg', SUBSTRING(matter_code, 9, 2), SUBSTRING(matter_code, 3, 2)) AS matter_type,
</if>
<if test="_databaseId == 'postgresql'">
    CASE
    WHEN matter_type = 'jg' THEN SUBSTR(matter_code, 9, 2)
    ELSE SUBSTR(matter_code, 3, 2)
    END AS matter_type,
</if>

2.2、flyway适配之后要根据配置的执行sql路径创建对应的文件目录。

        flyway 在未适配前会报错,execute error. SET ROLE "库名",主要是因为flyway"PostgreSQLConnection 类中的 doRestoreOriginalState 方法。将数据库连接的角色(role)重置为其原始值。高斯不支持此语法。可以参考下面的flyway适配高斯文档进行处理。

三、项目中涉及到的其他应用适配

目前项目中涉及flyway需要进行适配,参考文档:

flyway适配高斯数据库_flyway gaussdb-CSDN博客

地址:flyway适配高斯数据库_flyway gaussdb-CSDN博客

涉及xxl-job需要进行适配,参考文档:

xxl-job源码改造集成:适配opengauss数据、适配单点登录等_xxl job opengauss-CSDN博客

地址:xxl-job源码改造集成:适配opengauss数据、适配单点登录等_xxl job opengauss-CSDN博客

四、高斯数据库使用期间问题:

1、gsql 505.1.RC1 和 505.0的版本相差巨大,迁移数据需要修改语法。505.1中的建表sql会增加toast_storage_type 要去掉这个类型 才能在505.0版本插入。

2、A模式下 gsql 505.1.RC1 之前不兼容oracle的Dual虚表。需要用sys_dummy替换。

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值