作者:王颖泽
从事国产数据库产品管理、内核研发工作多年
获得PostgreSQL社区MVP
红象数据库是由RedElephant2020团队在开源PostgreSQL的基础上研发的一款以去O为目标的数据库产品。
这款产品的设计初衷是将应用程序使用的各类Oracle数据库对象及数据平滑地迁移至红象数据库,并利用PostgreSQL生态中经过大规模部署、使用和验证的接口、工具、扩展、方案等,在进行二次开发基础上为用户提供专业化的数据库服务,从而达到替换Oracle的目的。
下面将对红象数据库支持Oracle兼容的内核部分进行详细介绍:
数据类型
支持以下兼容Oracle的数据类型:
类型分类 |
描述 |
字符类型 |
CHAR、VARCHAR、VARCHAR2(支持CHAR或BYTE)、LONG |
数值类型 |
NUMBER、BINARY_FLOAT、BINARY_DOUBLE |
日期类型 |
DATE |
时间戳类型 |
TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE |
间隔类型 |
INTERVAL YEAR TO MONTH、INTERVAL DAY TO SECOND |
大对象类型 |
CLOB、BLOB |
二进制类型 |
RAW、LONG RAW |
其他 |
ROWID、UROWID |
红象数据库实现了兼容Oracle的大部分内置数据类型,不仅实现类型的输入、输出函数,还实现了转换、比较、操作符等函数。
内置函数
支持以下兼容Oracle内置函数:
内置函数分类 |
描述 |
正则表达式函数 |
regexp_substr、regexp_replace、regexp_like、regexp_count、regexp_count、regexp_match、regexp_extract |
操作符 |
.,+,?,*,{m},{m,},{m,n},[…],[^…],|,(…),\n,\,^,$,[:class],[.element.],[=character=] |
转换函数 |
to_char、to_date、to_timestamp、to_timestamptz、to_number、to_yminterval、to_dsinterval、rawtohex、rowidtochar、chartorowid、numtoyminterval、numtodsinterval |
聚集函数 |
max、min、avg、sum |
数学函数 |
stddev、stddev_pop、stddev_samp、var_pop、var_samp、variance |
字符串函数 |
substrb、replace、instrb、length、lengthb、substr、instr |
日期时间函数 |
date_part、round、trunc、from_tz、sys_extract_utc、sysdate、sessiontimezone、current_date、current_timestamp、systimestamp、localtimestamp、last_day、add_month、next_day、new_time、tz_offset、months_between |
其他 |
decode、nvl、nvl2、wmsys.wm.concat、nlssort |
系统视图
支持以下兼容Oracle的数据系统视图:
all_all_tables all_cons_columns all_constraints all_ind_columns all_indexes all_sequences all_synonyms all_view_columns all_tab_columns all_tables all_triggers all_types all_views |
dba_all_tables all_objects dba_cons_columns dba_constraints dba_ind_columns dba_indexes dba_role_privs dba_roles dba_sequences dba_synonyms dba_view_columns dba_tab_columns dba_tables dba_triggers dba_types dba_views dba_objects |
user_all_tables user_cons_columns user_constraints user_ind_columns user_indexes user_objects user_role_privs user_sequences user_synonyms user_tab_columns user_tables user_triggers user_types user_view_columns user_views user_tab_comments user_tab_cols user_col_comments col |
系统包
支持如下系统包:
DBMS_OUTPUT、DBMS_RANDOM、DBMS_ROWIDDBMS_OBFUSCATION_TOOLKIT、DBMS_STATS、DBMS_UTILITY、DBMS_PIPE、DBMS_METADATA、DBMS_ALERT、UTL_FILE
NLS_*参数
支持以下兼容Oracle的NLS_*参数,并可使用PostgreSQL的SET/SHOW语法进行设置和查看:
nls_date_format、mls_timestamp_format、nls_timestamp_tz_format、nls_length_semantics
兼容CREATE语法
兼容Oracle以下数据库系统对象的CREATE语法:
表空间、模式、表/分区表/全局、同义词、索引、序列、约束、视图、物化视图、DBLINK、函数、存储过程、触发器、自定义包、自定义类型等。
兼容伪表/伪列
包括DUAL、ROWNUM、ROWID、INSTANCE、LEVEL。
用户、模式、权限
-
实例中的每个数据库都默认带有sys和system用户,数据库的系统对象存放在sys模式下
-
创建用户时,会自动创建所对应的模式
-
对象属主为对象模式所对应的用户、
-
支持ANY权限
红象数据库中的库级用户与Oracle中的用户相对应。
高级功能
支持MERGE INTO、CONNECT BY、外连接操作符(+)、全局临时表、自定义包、自定义类型(不支持继承)、DBLINK、语句级回滚、索引启用/禁用、、约束启用/禁用、DDL自动提交、同义词、SQL语句中支持中文空格和括号、数据库编码支持GBK/GB18030、用户锁定和解锁等
PL/SQL功能
支持动态SQL(SELECT…INTO…USING…)、动态SQL的DML语句、游标、集合类型(嵌套表、关联数组、动态数组)及其方法、RECORD类型、%type、%rowtype、sys_refcursor、PLS/INTEGER、存储过程/函数语法、匿名块、函数IN OUT、OUT参数和结果集、匿名块IN、OUT、IN OUT参数的传参、标签Label、Label的多段引用、GOTO、内联函数或嵌套子过程、BULK COLLECT INTO、FORLOOP、FORALL、自定义异常、异常处理RAISE/RASE_APPLICATION_ERROR、Prgma EXCEPTION_INIT、函数/存储过程/包中的SUBTYPE、自治事务、PL/SQL中的语句级回滚、触发器内的占位符(:old、:new),referencing语法,statement判断(inserting、deleting、updating)、包中的公有/私有的类型、变量、函数/存储过程,支持Package Body中的BEGIN、END块、自定义类型中的构造函数、静态函数、方法等、按参数名绑定参数、参数占位符等
后续计划
为了能够实现平滑地替换Oracle这一目标,RedElephant2020团队在开源PostgreSQL的基础上进行了大小上百个功能点的开发。
接下来我们将逐步完善Oracle兼容的其他常用特性:
-
INSERT FIRST/ALL
-
PIPELINE函数
-
CLOB/BLOB/BFILE
-
VPD(Virtual Private Database)
-
常用系统包(DBMS_SQL、DBMS_JOB、DBMS_RLS等)
-
常用系统视图
-
常用内置函数
-
TABLE表达式
-
CURSOR表达式
-
……
数据库试用下载地址:https://gitee.com/redelephant2020/packages/tree/master/red-pg
正式发布 :红象数据库 redelephant2020
了解更多,请点击“
今天的文章
oracle旗下产品_oracle旗下产品分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/61213.html