新增功能
(1)内存分配时出现out of memory问题,增加detail和hint提示。
(2)lightdb支持K8S部署,分布式结构为1CN、2DN。核心模块有LightDB-patroni镜像、LightDB-operator镜像。LightDB-patroni镜像,又叫Light-POD(容器),由LightDB和patroni高可用工具组成。LightDB-operator镜像为用于管理LightDB库。K8S通过读取集群配置信息,通知LightDB-operator集群变更通知。LightDB-operator根据集群配置信息调整Light-POD集群在K8S中的部署。
(3)新增guc参数lightdb_server_version_num,用于标识LightDB版本号。在会话级别、lightdb.conf配置文件中不可修改该值。
(4)新增插件lt_sql_inspect,对交易时间定义,以及在交易时间内拦截、审计执行危险sql和命令。
危险SQL拦截支持如下配置参数:
lt_sql_inspect.secure_mode 配置需要拦截的SQL类型
lt_sql_inspect.secure_enable_time 配置交易时间,如果不配置则认为默认都在交易时间内
lt_sql_inspect.secure_enable_db指定需要拦截生效的数据库。默认都不拦截
兼容性
mysql兼容(该函数在mysql模式下生效)
(1)支持函数substr、substring
该函数第二个参数为负,查询的位置为反向查询;
(2)支持mysql除法,包括整型\整型、除0运算等;
(3)支持str_to_date函数
差异点:
3.1 不支持perpare语句进行变量绑定;
3.2 由于采用儒略日表示时间,无法表示出1999-00-00这种非法日期;
3.3 lightdb_sql_mode值为no_zero_date,返回值为空串,而不是NULL;
3.4 非法日期报错,采用LightDB自身的报错逻辑。
(4)支持@变量
4.1 如果变量未初始化,变量的类型为TEXT
4.2 如果变量的值是整数类型(smallint,bigint,int),存储类型为bigint
4.3 如果变量类型为float,float8,存储类型为float8
4.4 如果变量的类型为numeric,存储类型为numeric
4.5 如果变量的类型为其它类型,变量类型为TEXT
(5)支持查询时指定索引,仅语法支持。force index强制使用指定索引;ignore index废弃指定索引。
select * from lt_test_mysql_ddl force index(pk_lt_test_mysql_ddl);
select * from lt_test_mysql_ddl ignore index(pk_lt_test_mysql_ddl);
(6)支持在创建表时指定engine、collate、character set、comment等属性,其中engine、comment仅语法支持。兼容反引号(``)和tinyint类型兼容。
(7)支持insert on duplicate key update语法,当违反PRIMARY KEY或UNIQU约束,进行更新操作,反之则插入。
(8)支持replace insto语法,当违反PRIMARY KEY或UNIQU约束,先删除旧元组,再插入新元组。
oracle兼容
(1)新增no_unnest、pq_distribute
no_unnest:
pg_distribute
(2)支持oracle创建用户语法;支持级联删除用户、支持授权语句
(3) 支持全局临时表
- 支持Oracle全局临时会话表
- 支持Oracle全局临时事务表
(4)自动创建和数据库同名的用户,自动创建的同名user在创建的数据库中拥有CREATE、CONNECT、TEMPORARY、LOGIN权限,此功能不能用于分布式系统中。
(5)可变类型声明长度时可支持带字符或者字节为单位,目前单位为字符时,仅语法支持。
(6)新增导入工具ltldr,兼容sqlldr工具。通过控制文件导入指定表的数据进入数据库,可以同时导入多表。对于使用sqlldr工具导入数据的业务,具有先天的优势。
(7)兼容DBMS_UTILITY内置包format_error_backtrace函数,只记录plorasql执行错误最近的一次记录,使用该函数可以查看错误出现的位置。
(8)to_char函数增加对字符类型的转换。
(9)plorasql支持存储过程同时使用带out修饰的返回参数和return返回为空。return空功能在于中止该存储过程。
优化
(1)分布式备份恢复优化;
新增分布式备份id,表明某次分布式备份记录,可以通过分布式备份id来查看备份的整体状态(一条记录展示成功或失败)。