HaloDB 的 Oracle 兼容模式

embedded/2024/9/24 19:55:59/

↑ 关注“少安事务所”公众号,欢迎⭐收藏,不错过精彩内容~

前倾回顾

前面介绍了“光环”数据库的基本情况和安装办法。

  • 哈喽,国产数据库!Halo DB!
  • 三步走,Halo DB 安装指引

HaloDB是基于原生PG打造的新一代高性能安全自主可控全场景通用型统一数据库。 业内首次创造性的提出插件式内核架构设计,通过配置的方式,适配不同的应用场景,打造全场景覆盖的能力,满足企业大部分数据存储处理需求。从而消除数据孤岛,降低系统复杂度,保护企业既有投资,降低企业成本。同时支持x86、arm等异构平台之间的混合部署。

或许大家对 Halo DB 在 Oracle 和 MySQL 的兼容性支持方面也非常感兴趣。

本文将介绍如何开启 HaloDB 的 Oracle 兼容模式,以及基础使用方法。

HaloDB 的 Oracle 兼容模式

那么,HaloDB 到底兼容哪些 Oracle 语法、视图、系统包呢?

这里有一份(部分)清单,可供参考。

Halo 数据库支持 Oracle 兼容语法:

  • 支持连接符
  • 支持带别名的 UPDATE
  • 支持匿名子查询
  • 支持窗口函数 DISTINCT 操作
  • 支持 DUAL 伪表
  • 支持 SYSDATE/SYSTIMESTAMP
  • 支持 ROWNUM
  • 支持 ROWID
  • 支持 MINUS 操作
  • 支持 DECODE 函数(不限制参数个数)
  • 支持 DBLINK 语法
  • 支持 Oracle 格式的数值输出
  • 支持 VARCHAR2/NUMBER/CLOB/BLOB 数据类型
  • 支持 START WITH/CONNECT BY 语法
  • 支持 IN 的特别语法(例: SELECT * FROM a_table WHERE a IN b)
  • 支持 Oracle 格式的日期类型及运算
  • 支持 LISTAGG/WM_CONCAT 函数
  • 支持 HAVING/GROUP BY 子句顺序互换(即 HAVING 子句可在GROUP BY 之前也可在 GROUP BY 之后)
  • 支持 NULL 与空串的等价转换
  • 支持 Oracle 语法的序列取值
  • 支持 Oracle 语法的 PROCEDURE/FUNCTION/PACKAGE 的创建
  • 支持 ORDER BY 子句中使用列别名
  • 支持 TABLE 函数
  • 支持 MERGE INTO 语法
  • 支持 WITHIN GROUP 语法
  • 支持 Q’ 转义语法
  • 支持 NLS_DATE_FORMAT 参数
  • 支持 Oracle 的常用视图

Halo 数据库支持 Oracle 兼容的视图:

  • DBA_SEGMENTS
  • PRODUCT_COMPONENT_VERSION
  • USER_CON_COLUMNS
  • USER_CONSTRAINTS
  • USER_IND_COLUMNS
  • USER_OBJECTS
  • USER_PROCEDURES
  • USER_SOURCE
  • USER_TAB_COLUMNS
  • USER_TABLES

Halo 数据库支持 Oracle 兼容的系统包:

  • DBMS_ALERT
  • DBMS_ASSERT
  • DBMS_OBFUSCATION_TOOLKIT
  • DBMS_OUTPUT
  • DBMS_PIPE
  • DBMS_RANDOM
  • DBMS_UTILITY
  • UTL_FILE
  • UTL_I18N

等等。

清单很长,这里就不再列举了,详情可留言,带你进《HaloDB产品吐槽群》。

开启 HaloDB 的 Oracle 兼容模式

修改配置文件

如需开启 Oracle 兼容模式,需要先对数据库配置文件 postgresql.conf 进行调整。

#database_compat_mode = 'postgresql' --> database_compat_mode = 'oracle'
#standard_parserengine_auxiliary = 'on' --> standard_parserengine_auxiliary = 'on'
#transform_null_equals = off --> transform_null_equals = off
#oracle.use_datetime_as_date = false --> oracle.use_datetime_as_date = true

其中,

  • database_compat_mode

该参数表示:

该参数为枚举类型,表示数据库运行模式。

默认值为 postgresql,其它可取值包括 oracle 、 mysql 、 sybase 、 sqlserver 、 db2 等。

  • standard_parserengine_auxiliary

该参数表示:

是否需要标准编译引擎协同。默认值 on.

  • transform_null_equals

该参数表示:

由于针对NULL的任何操作都只会返回NULL,所以要判断一个值是否为NULL一般只能用IS NULL来判断。

Halo提供了参数 transform_null_equals 来控制是否可以用“=”操作符来判断一个值是否为NULL。

  • oracle.use_datetime_as_date

该参数表示:

Oracle 的 date 类型带有日期和时间信息,这和Halo的默认设置不同。

默认情况下,Halo的date类型只包含日期,datetime类型才包含日期和时间信息。

如果想要实现和Oracle相同的date类型,可以将参数use_datetime_as_date设置为true (默认值是 off)。

重启 Halo 数据库

pg_ctl restart

创建 Oracle 扩展

针对需要启用 Oracle 解析引擎的数据库创建 Oracle 扩展:

需要注意的是:如需采用 oracle 模式,新建库要创建扩展才能使用 oracle 语法。

create extension aux_oracle cascade;

查看已安装的扩展:

halo0root=# \dx
                                  List of installed extensions
    Name    | Version |       Schema       |                    Description
------------+---------+--------------------+----------------------------------------------------
 aux_init   | 1.0     | information_schema | Init Supplementary Extension
 aux_oracle | 1.8     | public             | Halo Oracle Supplementary Extension
 pgcrypto   | 1.3     | public             | cryptographic functions
 plorasql   | 1.0     | pg_catalog         | Oracle Compatibal SQL (PL/SQL) procedural language
 plpgsql    | 1.0     | pg_catalog         | PL/pgSQL procedural language
(5 rows)

测试 HaloDB 的 Oracle 兼容模式

1. 查看组件产品的版本和状态信息。

halo0root=# table product_component_version;
  product   |      version       |      status
------------+--------------------+------------------
 Halo 14.10 | 1.0.14.10 (231130) | 64bit Production
 plpgsql    | 1.0.14.10 (231130) | 64bit Production
 aux_init   | 1.0                | 64bit Production
 plorasql   | 1.0                | 64bit Production
 pgcrypto   | 1.3                | 64bit Production
 aux_oracle | 1.8                | 64bit Production
(6 rows)

2. 测试 DBMS_ASSERT 系统包

该系统包用于对输入值的属性进行验证。

ENQUOTE_NAME 方法表示用双引号引用字符串,并检查其是否为合法的SQL标识符。

halo0root=# SELECT DBMS_ASSERT.ENQUOTE_NAME('Hello, HaloDB');
  enquote_name
-----------------
 "hello, halodb"
(1 row)

halo0root=# SELECT DBMS_ASSERT.ENQUOTE_NAME('Hello, HaloDB', false);
  enquote_name
-----------------
 "Hello, HaloDB"
(1 row)

3. 验证和Oracle相同的date类型

确认 oracle.use_datetime_as_date 参数已开启。

halo0root=# show oracle.use_datetime_as_date;
 oracle.use_datetime_as_date
-----------------------------
 on
(1 row)

验证步骤如下:

halo0root=# create table t (a date, b datetime);
CREATE TABLE
halo0root=# insert into t select now(),now();
INSERT 0 1
halo0root=# table t;
          a          |          b
---------------------+---------------------
 2024-05-28 12:09:11 | 2024-05-28 12:09:11
(1 row)

总结

到此,我们介绍了如何开启 HaloDB 的 Oracle 兼容模式,并做了简单验证。

如果你也对这款“光环”数据库感兴趣,欢迎转发、留言。

🌻 往期精彩 ▼

  • 哈喽,国产数据库!Halo DB!
  • 从 PG 技术峰会南京站汲取的那些干货
  • PG 扩展推荐:pgpasswd & PG 密碼長度
  • 即将告别PG 12,建议升级到PG 16.3版本
  • PG Style! 盘点几个常用的 Postgres 环境变量
  • 后 EL 7 时代,PG 16 如何在 CentOS 7 上运行

-- / END / --

alt

如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)

本文由 mdnice 多平台发布


http://www.ppmy.cn/embedded/44295.html

相关文章

应急响应流程

应急响应的流程(Linux 和 Windows) 1、收集信息:搜集客户信息和中毒信息,备份 2、判断类型:判断是否是安全事件、是何种安全事件(勒索病毒、挖矿、断网、ddos等) 3、深入分析:日志分…

【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk

背景:部分客户需求将自己网站打包成app,供用户在浏览器安装使用、 网页网址快速生成app 准备材料操作流程第一步:打开HBuilder X新建项目第二步创建Wap2App项目第三步修改App图标第四步发布app第五步查看apk 准备材料 1.需要打包的网页 2.ap…

macbook中foxmail的通讯录迁移

之前windows中用习惯了foxmail,换成macbook后,还是沿用foxmail。使用一段时间后,确实受不了foxmail的不便:1、版本比较低1.5.6,很多windows新版的功能都没有;2、动不动莫名其妙崩溃,写了半天的邮件,点击发送就直接崩了,又得重新写。 忍耐了几个月后,下定决心换成网易…

Kotlin学习笔记 泛型

在 Kotlin 中,T 通常用作类型参数的占位符,它在实例化或传递参数时会被替换成具体的类型。 Kotlin 支持泛型,这意味着您可以编写可以与多种数据类型一起工作的代码,而不必为每种数据类型编写单独的代码。 ### 泛型类和函数 在 …

深入解析Web前端三大主流框架:Angular、React和Vue

Web前端三大主流框架分别是Angular、React和Vue。下面我将为您详细介绍这三大框架的特点和使用指南。 Angular 核心概念: 组件(Components): 组件是Angular应用的构建块,每个组件由一个带有装饰器的类、一个HTML模板、一个CSS样式表组成。组件通过输入(@Input)和输出(…

android怎么告诉系统不要回收

在Android中,如果你想告诉系统不要回收你的应用程序,可以通过设置Activity的属性来实现。你可以设置android:configChanges属性,指定在哪些配置更改时不重新创建Activity。 例如,如果你想指示系统在屏幕方向更改时不要重新创建Ac…

使用NuScenes数据集生成ROS Bag文件:深度学习与机器人操作的桥梁

在自动驾驶、机器人导航及环境感知的研究中,高质量的数据集是推动算法发展的关键。NuScenes数据集作为一项开源的多模态自动驾驶数据集,提供了丰富的雷达、激光雷达(LiDAR)、摄像头等多种传感器数据,是进行多传感器融合…

Python筑基之旅-运算符

目录 一、运算符 1、了解定义 2、理解意义 2-1、基本数据处理 2-2、条件判断 2-3、逻辑操作 2-4、赋值和更新 2-5、位操作 2-6、提高代码可读性 2-7、解决实际问题 2-8、学习其他编程语言的基础 3、探索方法 3-1、理解概念 3-2、练习基本运算 3-3、掌握优先级 …