兼容模式 |
功能模块 |
新增特性 |
通用 |
实例管理 |
在实例级别隔离数据库兼容模式:在vb_initdb初始化实例时指定兼容模式。实例创建完成后,该实例中仅支持初始化过程中所指定的Oracle、MySQL、PostgreSQL、Teradata或SQLServer中任意一种兼容模式下的以下特有功能:
数据类型
系统函数、系统视图
参数变量
SQL语法、PL/SQL语法
关键字
注意:
去除了原CREATE DATABASE语法中的DBCOMPATIBILITY选项。
初始化数据库实例后,实例的兼容模式不可修改。
在升级数据库前,若同一个数据库实例中存在多种不同兼容模式的Database,则应先把不同兼容模式的Database拆分到不同的数据库实例,保证同一个数据库实例中只有一种兼容模式的数据库,然后再进行升级。否则会导致升级后数据库功能不可用。
|
资源池化 |
资源池化支持NoF+接口,提供基于Nvme over Fabirc接口的存储访问能力,提升集群整体利用底层闪存存储带宽与速率的效率。 |
备份恢复 |
支持逻辑备份工具vb_dump在使用江南天安加密算法进行加密导出时指定纯文本以外的文件格式。即导出格式可以是目录格式(p),自定义归档格式(c),tar格式(t)或者纯文本格式(p)。相应地,使用vb_restore进行恢复时支持通过SM4硬件加密方式解密。 |
支持逻辑恢复工具vb_restore使用`--exclude-table`或`--exclude-table-file`选项在恢复时排除表;支持使用`-r, --remap-schema`选项把原有模式下的所有数据库对象导入到另一模式下。 |
安全 |
KMS加密新增支持格尔加密算法(KOAL_SM4_MOD2)。 |
支持高可用流复制的架构下的主库和备库使用江南天安加密算法对存储数据进行加密。在开启透明数据加密的高可用架构中,备库在数据页置换时进行数据加密,在数据页加载时进行数据解密。 |
PL/SQL |
新增支持IF_THEN控制语法的条件语句,用于判断语句是否满足条件。 |
新增支持RETURN语句,用于返回数据。 |
高可用 |
在逻辑复制过程中支持DDL操作,参考逻辑复制支持DDL操作。 |
Oracle兼容性 |
数据类型 |
支持全角空格:支持表意空格(代码U+3000,UTF8码 E38080)和全宽空格(代码U+2003,UTF8码 E28083),能正确解析并执行包含全角空格字符的SQL语句。 |
函数 |
支持KEEP函数与聚合函数表达式结合使用,获取满足筛选条件的数据。 |
SQL语法 |
支持在分区表创建全局索引时支持函数表达式,并在使用时命中索引。详见CREATE INDEX。 |
支持将视图作为MERGE INTO语法的对象,视图定义可以为任意支持更新的视图。详见MERGE。 |
支持创建或更改物化视图时定义刷新方式等特性。详情可见CREATE-MATERIALIZED-VIEW、ALTER-MATERIALIZED-VIEW。 |
外连接支持一表对多特性(即单表不同字段外连接不同表的不同字段)、多对多表特性(即多表相互连接)。 |
支持在查询语句中的开窗语句RANGE BETWEEN AND语法内使用表达式,其中表达式的结果可以为0、正数或时间区间。参见开窗函数支持表达式。 |
PL/pgSQL |
支持在 PL/pgSQL 模块中创建自定义SUBTYPE,包括在匿名块、函数、Package中定义。 |
支持使用%ROWTYPE的方式引用视图的数据类型,允许用户使用`%ROWTYPE`声明数据库中表或视图的完整或部分行的记录。 |
特性参数 |
支持通过result_case_mode特性参数控制返回字段名的大小写,若指定的列字段名显式的被双引号包含,则查询字段大小写与引号内保持一致。 |
内置包 |
新增支持DBMS_DDL内置包,提供对存储过程中某些SQL数据定义语言(DDL)语句的访问。 |
新增支持DBMS_SCHEDULER内置包,提供了一组可以从任何PL/pgSQL程序调用的调度函数和过程。 |
新增支持UTL_TCP.open_connection函数可以使用域名作为入参。 |
新增支持DBMS_XMLDOM.makeCharacterData函数,将指定的DOMNODE转换成DOMCharacterData。 |
DBMS_LOB新增以下4个函数:
DBMS_LOB.ERASE:用于擦除整个或部分的内部LOB。
DBMS_LOB.FILEEXISTS:检查服务器是否存在该文件。
DBMS_LOB.LOADFROMFILE:加载BFILE类型的数据到内部LOB中。
DBMS_LOB.LOADLOBFROMFILE:加载BFILE类型的数据到BLOB对象。
|
MySQL兼容性 |
数据类型 |
DOUBLE:双精度浮点数。 |
MEDIAMINT:作为UNIT4的别名。 |
MEDIUMTEXT:变长字符串。 |
MEDIUMBLOB:二进制大对象。 |
函数 |
TO_BASE64:根据BASE64编码规则,将一个字符串编码成BASE64编码格式,返回字符串的编码结果。 |
FROM_BASE64:根据BASE64编码规则,将一个BASE64编码的字符串解码,返回字符串的解码结果。 |
MY_ENCRYPT_AES128:基于AES算法,使用密钥字符串对明文字符串进行加密。 |
MY_DECRYPT_AES128:根据给出的密钥字符串返回加密字符串的解密结果。 |
HEX:用于将输入的数据转换为十六进制表现形式。 |
UNHEX:用于将一个十六进制编码的字符串解码。 |
JSON_APPEND:用于修改JSON文档,向指定的数组节点中追加一个元素并返回修改后的JSON文档。功能同JSON_ARRAY_APPEND函数。 |
JSON_ARRAY_APPEND:用于修改JSON文档,向指定的数组节点中追加一个元素并返回修改后的JSON文档。 |
JSON_ARRAY_INSERT:用于修改JSON文档,向指定的数组节点中的指定位置插入一个值并返回新的JSON文档。 |
JSON_ARRAYAGG:用于将指定列中的值聚合为一个JSON_ARRAY型数组。 |
JSON_CONTAINS_PATH:用于检验一个或多个指定的路径是否包含于JSON文档中。 |
JSON_DEPTH:用于返回JSON文档的最大深度。 |
JSON_INSERT:用于想一个JSON文档中插入数据并返回新的JSON文档。 |
JSON_KEYS:用于以JSON数组的形式返回json_doc对象最外层的key值列表。 |
JSON_MERGE:用于合并两个及以上的JSON文档。功能同JSON_MERGE_PRESERVE函数。 |
JSON_MERGE_PRESERVE:用于合并两个及以上的JSON文档。 |
JSON_MERGE_PATCH:用于合并两个及以上的JSON。 |
JSON_OBJECT:用于接收一个键值对列表,并返回一个包含这些键值对的JSON对象。 |
JSON_OBJECTAGG:用于将入参指定的参数作为键和值聚合为一个JSON对象。 |
JSON_PRETTY:用于格式化输出一个JSON文档。 |
JSON_QUOTE:用于将输入的字符串输出为JSON文档内,并用双引号修饰。 |
JSON_REMOVE:用于从一个JSON文档中删除由路径指定的JSON对象并返回修改后的JSON对象。 |
JSON_SEARCH:用于返回JSON文档中指定字符串的路径。 |
JSON_STORAGE_SIZE:用于返回存储JSON文档的二进制字节数。 |
JSON_TYPE:用于根据输入的JSON文档返回数据类型。 |
DEAFULT:用于获取表字段的默认值。 |
DATABASE:用于获取当前数据库模式的名称。 |
操作符 |
允许操作符AND,OR的两侧使用时间类型。详见MySQL兼容性手册中的逻辑操作符。 |
JSON与JSONB操作符如下:
->:在JSON文档中提取路径表达式指定的数据并返回。
->>:取消对JSON文档中提取的数据引号的引用。 |
新增数字操作符DIV:除(取整)。
|
PL/SQL |
支持通过@variable变量实现SQL中的递归查询,循环调用一个单独的查询来遍历整个数据集 |
新增支持循环语法,包括WHILE DO和REPEAT语句。 |
特性参数 |
vastbase_sql_mode特性参数增加pipes_as_concat、pad_char_to_full_length、no_zero_date取值。 |
SQL语法 |
支持在ALTER TABLE ADD或者ALTER TABLE MODIFY的同时支持通过FIRST或AFTER关键字指定新增字段的位置或被修改后字段的位置。详见ALTER TABLE。 |
支持创建分区表时用表达式作为分区键,详见CREATE TABLE PARTITION。 |
支持分区表使用函数作为分区条件,支持的函数列表参见CREATE TABLE PARTITION 表1。 |
支持CREATE TABLE PARTITION使用`less than maxvalue`语法用于设置范围分区的上边界。 |
支持在INSERT语句中使用SET进行赋值。 |
支持显示服务器错误或警告信息,详见SHOW WARNINGS/ERRORS。 |
支持指定多个分区查询数据,详见SELECT。 |
支持LOAD DATA命令实现从一个文件拷贝数据到一个表。 |
INSERT的冲突处理子句`ON DUPLICATE KEY UPDATE`支持插入数据时字段重复。 |
支持反引号解释为标识符。 |
新增支持DO expr_list语法,用于执行表达并不返回结果。 |
支持CREATE TABLE创建表时的如下特性:
建表时指定字符集支持`CHARACTER SET`关键字。
字符集CHARSET支持使用单引号包裹,例如`CHARSET='utf8'`。
支持建表时指定关键字key和index创建普通索引,包括单列索引和复合索引。 |
支持CREATE USER时带if not exists选项。 |
非保留关键字(Non-Reserved Keywords)可以直接作为SQL语句中的别名(即标识符Identifier),Vastbase当前支持作为别名的非保留关键字列表详见SELECT 表1。 |
PostgreSQL兼容性 |
函数 |
支持ARRAY_POSITIONS函数,用于返回在第一个参数给定的数组(数组必须为一维数组)中,第二个参数所有出现的位置的下标所组成的数组。 |
支持JSONB_SET函数,用于替换指定的路径上的值或者在指定的路径上插入值。 |
支持[JSONB_INSERT函数,用于将一个新值插入到JSONB值中的指定路径位置。 |
支持JSONB_PATH_EXISTS函数,用于对JSONB类型的数据进行检查,检查给定的JSON路径中是否存在指定的JSON值。 |
操作符 |
支持JSONB -操作符,用于从JSON对象中删除键(以及它的值),或从JSON数组中删除匹配的字符串值。 |
SQL语法 |
INSERT中的冲突处理子句ON CONFLICT DO UPDATE新增以下用法:
支持使用RETURNING返回实际插入的字段值,或是冲突更新后的字段值。
支持指定冲突后的动作时使用WHERE子句,即在INSERT语句遇到冲突后,只有满足WHERE条件的字段才会被更新。 |
支持通过CREATE TABLE为表中字段指定IDENTITY属性,或通过ALTER TABLE的ALTER COLUMN子句为字段指定IDENTITY属性。 |
支持ALTER TABLE使用ADD COLUMN子句新增字段时的[ IF NOT EXISTS ]选项:如果已经存在相同名称的字段,不会抛出一个错误,而会发出一个通知,告知字段已存在。 |
支持使用`ALTER TABLE ATTACH PARTITION`把普通表加入到分区表中,详见[名字还没确定]。 |
支持使用`ALTER INDEX ATTACH PARTITION`把索引加入到分区索引中。详见ALTER INDEX。 |
支持PG风格的分区表声明方式,详见CREATE TABLE PARTITION。 |
支持IMPORT FOREIGN SCHEMA语法,用于从外部服务器中导入表定义。 |
SQL Server兼容性 |
数据类型 |
支持Binary数据类型。Binary类型存储的是固定长度的二进制字符串,指定长度后未满足长度的将自动补齐。 |
函数 |
IDENTITY:用于在SELECT INTO语句生成的表中新增一个具有IDENTITY属性的字段。 |
NEWID:用于生成一个随机UUID。 |
NEWSEQUENTIALID:用于生成有序UUID。 |
新增支持以下@@全局函数:
@@IDENTITY:返回当前作用域中的标识列内的最后一个标识值。
@@LANGID:返回当前正在使用的语言的本地语言标识符(ID)。
@@NESTLEVEL:返回在本地服务器上执行的当前存储过程(或者自定义函数)的嵌套级别。
@@SERVERNAME:返回当前Vastbase数据库服务器的名称(hostname)。
@@CURSOR_ROWS:它返回在连接上打开的上一个游标中当前拥有的限定行的数目。
@@SPID:返回当前用户进程的会话 ID。
@@CONNECTIONS:返回Vastbase自上次启动以来尝试的连接数,无论连接是成功还是失败。
@@MAX_CONNECTIONS:返回当前数据库允许的最大数据库并发连接数。
@@MAX_PRECISION:按照服务器中的当前设置,返回 decimal 和 numeric 数据类型所用的精度级别。
以下全局函数仅做兼容性支持,不实现功能:@@REMSERVER、@@SERVICENAME、@@TEXTSIZE、@@LOCK_TIMEOUT、@@OPTIONS、@@DATEFIRST |
类型转换函数CONVERT的入参“style”是用于指定函数将如何进行转换的一种整数表示,当前版本新增若干style支持的样式。 |
临时表 |
支持以井号(#)开头的临时表,`#table_name`表示本地临时表,`##table_name`表示全局临时表。 |
SQL语法 |
查询语句SELECT新增APPLY子句,支持的类型为CROSS APPLY和OUTER APPLY,表示把右表表达式应用到左表表达式中的每一行。 |
支持SELECT查询的FOR XML子句,即以XML字符串的形式显示查询结果集。 |
支持动态SQL返回结果集:在动态SQL执行时,其中的查询结果集一个或多个可以返回到执行体外。详见EXECUTE IMMEDIATE。 |
支持在ALTER TABLE给表新增字段时为该字段指定IDENTITY属性,用于获得自动增加的标识号。被该属性修饰的字段即为表的标识列。 |
支持在CREATE TABLE建表时为字段指定IDENTITY属性,用于获得自动增加的标识号。 |
OPENXML关键字 |
支持使用关系运算符OPENXML从XML文档生成一个结果集。XML处理流程主要分为三个阶段:
准备阶段:sp_xml_preparedocument
XML解析阶段:openxml
回收阶段,sp_xml_removedocument |