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

2024年 5月 24日 34.4k 0

前言

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

广告时间:
  我们的HaloDB是基于原生PG打造的新一代高性能安全自主可控全场景通用型统一数据库。
   业内首次创造性的提出插件式内核架构设计,通过配置的方式,适配不同的应用场景,打造全场景覆盖的能力,满足企业大部分数据存储处理需求。从而消除数据孤岛,降低系统复杂度,保护企业既有投资,降低企业成本。同时支持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;

测试结果截图如下:
Halo DB 14 小白零基础系列(17)--初探HaloDB的Oracle兼容性-1

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

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

测试结果截图如下:
Halo DB 14 小白零基础系列(17)--初探HaloDB的Oracle兼容性-2

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();

测试结果截图如下:
Halo DB 14 小白零基础系列(17)--初探HaloDB的Oracle兼容性-3

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

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

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

最后

   虽然是慢工,但是不是什么细活

相关文章

pt-kill工具的使用
pt-ioprofile工具包的使用
数据库管理-第216期 Oracle的高可用-01(20240703)
DBMS_REPAIR EXAMPLE SCRIPT WITH PARTITION
数据库事务的四大特性: ACID 
使用BBED修复损坏的SYSTEM文件头

发布评论