VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

版本介绍

Vastbase G100 V2.2 Build 16是Vastbase于2024年3月7日发布的先行版,新增了大量语法、函数、功能以及兼容性特性。本章将介绍新增特性概览,其他功能请参考Vastbase G100 V2.2 Build 15

新特性

兼容模式 功能模块 新增特性
通用 外部数据封装器 Vastbase支持创建外部数据封装器tds_fdw,用于远程访问SQL Server数据库。
插件 新增pg_repack插件:用来重新组织和压缩数据库中的astore,行存表和索引,主要用于在线重建表和索引,以解决表或索引膨胀的问题,减少碎片并提高性能。
GUC参数 参数rewrite_rule新增可选取值"enable_any_sublink_pullup_enhanced",启用此选项后计划器会尝试将相关子连接进行提升,生成更好的执行计划。
新增参数wdr_snapshot_auto_vacuum_full,用于控制是否在清理快照后对相关表进行vacuum full的功能。
Oracle兼容性 函数 支持xmlagg.getclobval函数,用于将xml类型转换为clob类型,且是尾调用形式。
支持XMLPARSE函数,用于从字符数据产生XML类型的值。它可以将包含XML内容的字符串、文本或二进制数据解析为可以在数据库中进行处理和查询的XML类型。
支持通过实现一组统称为ODCIAGGREGATE的接口函数来自定义聚合函数,将这些函数实现为对象类型中的方法。每个用户定义的聚合函数支持使用ODCIAGGREGATE函数(或步骤)来定义任何聚合函数执行的内部操作,包括初始化、迭代、合并和终止。
SQL语法 支持UPDATE+子查询+SET...语法,用于通过子查询生成要更新的数据集,并更新符合子查询条件的列值。
CREATE TRIGGER创建触发器时支持使用PL/SQL(匿名块)来代替触发函数。
多表关联的视图,支持通过视图对单个基表进行DML操作(插入、更新、删除)。
支持通过SELECT/FETCH INTO向RECORD数组或复合类型数组赋值,详见数组支持RECORD类型
使用CREATE PACKAGE BODY语法创建包体时:
  • 包体中支持使用`INSERT ALL INTO`语法,将子查询的结果数据插入目标表,支持缺省values字段。
  • 包体支持预定义异常条件dup_val_on_index,它用于处理在插入或更新操作中违反唯一性约束的情况。
  • INSERT语法支持NOLOGGING关键字,即`INSERT INTO...NOLOGGING`。该关键字无实际意义,仅为了实现与Oracle的语法兼容。
    PL/SQL PL/SQL里,函数的参数类型可以通过%type引用package中的属性来声明。即PL/SQL里函数参数支持调用独立package的属性
    package中支持自治事务,但是不能在package实例中声明,只能在package的函数或过程中声明。
    内置包 内置包子程序DBMS_LOB.READ的读取类型支持BLOB/CLOB。
    特性参数 新增Oracle模式数据库兼容性行为配置项a_format_behavior_compat_options。当其取值包含`update_subselect_check_unique`时,用于控制使用`UPDATE+子查询+SET语法`时,检查子查询中非目标表的唯一索引是否都出现在了where条件中。
    新增参数ora_illegal_nul_conversion,用于控制重载包函数时,将NUL(0x00)字符转换为空格保存还是报错处理。设置为'on'表示转换为空格进行保存。
    组件 使用DATABASE LINK(jdbc_fdw)时:
  • 当Oracle源端对象的定义发生改变时,Vastbase目标端不需要删除再重建存储在本地的外部表。
  • 支持子查询下推功能。当一个子查询可在远端执行时,可将其下推到远端执行,无需将子查询中的远端表拉到本地再执行子查询。
  • MySQL兼容性 SQL语法 新增SHOW SLAVE STATUSSHOW REPLICAS语法,用于查看WAL(xlog)日志同步状态信息。后者必须在主库执行才有效。
    新增SHOW OPEN TABLES语法,用于列出所有被打开的非临时表。
    新增SHOW STORAGE ENGINES语法,用于列出支持的存储引擎信息。
    支持使用形如"ALTER TABLE ADD(col type), ADD(col type) ..."的语法向表中添加多个字段。详见ALTER TABLE
    支持对字段定义zerofill属性,用于修饰整型数据类型。当字段中写入值的长度小于定义长度时,会在数值前面用零补全。详见column定义支持ZEROFILL/UNSIGNED属性
    在MySQL兼容模式下,当用户将多个相邻的带引号的字符串放置在一起时,它们会被自动连接为一个字符串,详见字面值
    特性参数 支持通过参数lower_case_column_names控制select_list中别名的大小写敏感性。
    B语法校验参数vastbase_sql_mode新增可选取值"ERROR_FOR_DIVISION_BY_ZERO",用于控制除数为0时是否报错。
    查看和设置参数 支持在MySQL兼容模式下通过`@@变量`的方式查看和设置USERSET类型参数
    SQL Server兼容性 函数 YEAR函数,返回给定日期的年份。
    ISDATE函数,用于判断表达式是否为有效的datetime值。
    ISNUMERIC函数,用于判断表达式是否为有效的数值类型。
    REPLICATE函数,用于指定一个字符串值重复的次数。
    SQL语法 支持使用insert into tablename exec proc语法,将存储过程输出的结果集插入到表中。详见INSERT
    支持UPDATEDELETE语法的各类关联操作语法,包括FROM中的JOIN功能:内部连接(INNER JOIN)、左外部连接(LEFT [OUTER] JOIN)、右外部连接(RIGHT [OUTER] JOIN)、完全连接(FULL [OUTER] JOIN)。
    支持通过EXEC调用存储过程。使用`EXEC PROC`传参时,允许出现传参不完整行为,此功能受参数mssql_format_behavior_compat_options的`use_mssql_execute_gram`选项控制。
    GUC参数 新增SQL Server模式数据库兼容性行为配置项mssql_format_behavior_compat_options。当其取值包含"use_mssql_execute_gram"时,调用存储过程时支持忽略已有默认值的入参。
    新增参数enable_mssql_datatype,用于控制SQL Server兼容模式下,数据类型float4的精度是否与SQL Server一致。
    PostgreSQL兼容性 函数 JSONB_PATH_QUERY_FIRST:此函数在一个给定的JSON中根据指定的路径获取值,并返回第一个匹配的值,如果没有结果则返回NULL。
    JSONB_OBJECT_AGG:此聚合函数用于返回一个由一组键值对组成的JSON对象。

    特性优化

    兼容模式 功能模块 优化特性
    通用 逻辑复制 Vastbase逻辑复制支持DDL,当前支持的DDL包括:
  • ALTER INDEX
  • ALTER VIEW
  • CREATE/ALTER/DROP/REFRESH [INCREMENTAL] MATERIALIZED VIEW
  • CREATE/ALTER/DROP TYPE
  • CREATE/ALTER/DROP FUNCTION
  • CREATE/ALTER/DROP PROCEDURE
  • CREATE/ALTER/DROP TRIGGER
  • CREATE/DROP PACKAGE
  • WDR快照 支持通过以下策略改善启用wdr后产生的快照占用空间大的问题:
  • 用于控制后台线程Snapshot自动对数据库监控数据执行快照操作时间间隔的参数wdr_snapshot_interval,其最大值从60min提升为720min。适当提高此参数值可以降低采样频率。
  • 设置参数wdr_snapshot_auto_vacuum_full为on后,wdr相关统计表中的死亡元组会在原有每次的清理操作之后被清除。
  • 分区剪枝 静态分区剪枝支持一级、二级分区表,支持的分区类型及表达式如下:
  • 范围(Range)分区:<,<=,=,>,>=,like,any,all
  • 列表(List)分区:<,<=,>,>=,<>(不等于)
  • 哈希(Hash)分区:=
  • 间隔(Interval)分区:<,<=,=,>,>=,any,all
  • 动态分区剪枝(由GUC参数enable_runtime_prune控制,默认值为on)支持对Range、List、Hash、Interval分区表进行动态分区剪枝,支持的场景如下:
  • 支持PREPARE/EXECUTE语法法对一级、二级分区表动态分区剪枝。需注意查询条件需包含分区键,且条件值为参数。
  • 支持InitPlan场景的一级、二级动态分区剪枝;需注意分区键的条件为子连接,且为非相关子连接。
  • 支持Nested Loop且连接条件可下推至分区表场景的一级、二级动态分区剪枝,查询走nestloop计划,且包含分区键的条件,其中分区键存在本地分区索引。
  • Oracle兼容性 函数 TRUNC函数相加减,可以输出以天为单位的计算结果。升级后,在Oracle兼容模式下此运算输出无day(s)字样的纯数字,与Oracle保持一致。