暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Halo DB 14 小白零基础系列(17)--初探HaloDB的Oracle兼容性

冷狼 2024-12-10
44

前言

 上一篇我们讲了HaloDB中的DLB,本篇来聊聊HaloDB中的Oracle兼容性,废话不多说,打个广告就开车。

广告时间:

   Halodb业内首次创造性的提出插件式内核架构设计,通过配置的方式,适配不同的应用场景,打造全场景覆盖的能力,满足企业大部分数据存储处理需求。从而消除数据孤岛,降低系统复杂度,保护企业既有投资,降低企业成本。同时支持x86、arm等异构平台之间的混合部署。
   如果有对我们的产品感兴趣的朋友可以通过主页的联系方式与我取得联系,获取license来安装体验,目前已经开通HaloDB吐槽群,欢迎来喷,进群请私聊我获取。

一、HaloDB的多模式兼容引擎

  在之前的文章提到过,HaloDB可以通过一款数据库设置不同的兼容模式,如此优异的特性得益于HaloDB的多模式兼容引擎,Halo 数据库具有独有的多模解析引擎技术,可以兼容 PostgreSQL、Oracle、Sybase、MySQL、SQL Server、DB2 等主流数据库语法从而大幅减少迁移项目中的代码修改量。
  那如何使用我们的Halo可配置引擎配置我们的Oracle模式,我们一起往下看。

二、启用Oracle解析引擎

  所有的引擎启动都需要配置HaloDB中的postgresql.conf文件,Oracle 模式涉及的相关配置参数如下:

vi $PGDATA/postgresql.conf
-- 开启二次解析
-- standard_parserengine_auxiliary = 'on' --> standard_parserengine_auxiliary = 'on'
-- 修改数据库模式为 oracle
database_compat_mode = 'postgresql' --> database_compat_mode = 'oracle'
-- 实现和 Oracle 相同的 date 类型
oracle.use_datetime_as_date = false --> oracle.use_datetime_as_date = true
-- 是否可以用“=”操作符来判断一个值是否为 NULL。
transform_null_equals = off --> transform_null_equals = 'off'
复制

更改完配置文件后需要重新启动数据库并创建拓展,操作步骤如下,请参考

--halo 用户下操作
pg_ctl restart
psql -c " create database oracle_test;"
psql -d oracle_test -c "create extension aux_oracle cascade ;"
复制

重启成功后检查HaloDB的模式:

[halo@HaloDemo01 halo]$ hsql 
psql (1.0.14.10 (240229))
Type "help" for help.

halo0root=# show database_compat_mode;
 database_compat_mode 
----------------------
 oracle
(1 row)
复制

三、 兼容性测试

1、测试HaloDB是否支持INT、FLOAT、NUMERIC等数值类型

CREATE TABLE halo_test (
a INT,
b NUMERIC,
c FLOAT);
insert into halo_test VALUES(1,1.5,1.24);
SELECT * from halo_test;
复制

测试结果截图如下:
image.png

2、测试HaloDB是否支持窗口函数:

CREATE TABLE halo_test (
a SERIAL,
b NUMERIC
);
SELECT avg(b) OVER(PARTITION BY b) FROM halo_test;
复制

测试结果截图如下:
91b92f0460b9d89a397ec3ee397908d.png

3、测试HaloDB是否支持事件触发器:

--创建表
CREATE TABLE halo_test (
a SERIAL,
b NUMERIC
);

--创建函数
CREATE FUNCTION halo_etrigger_func() RETURNS event_trigger 
AS 
$$
BEGIN
RAISE NOTICE 'halo_etrigger: % %', tg_event, tg_tag;
END;
$$ LANGUAGE plpgsql;
--创建触发器
CREATE EVENT TRIGGER halo_etrigger ON ddl_command_start EXECUTE FUNCTION
halo_etrigger_func();
复制

测试结果截图如下:
fd855d76a673fd2ed502e8d64c0dcf6.png

4、测试HaloDB中的自定义类型转换功能:

CREATE CAST (oid AS numeric) WITH INOUT AS IMPLICIT;
复制

ef2881356428ced0146af96ef96404d.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论