解决人大金仓数据库KingbaseES json_equal表达式不支持json和jsonb类型的问题

关键字

JSON_EQUAL、参数类型、JSON、JSONB、人大金仓

问题描述

对于目前KES中oracle模式下JSON_EQUAL比较输入的两个JSON值是否相等这一条件表达式,当为表达式中参数1与参数2的任意位置传入json或jsonb值时,KES均不能有效支持该种类型参数的传入,导致报错。详见下图,当对表达式中传入的数据转换为json或者是jsonb以及原生json值时,会出现报错提示,该报错出现的原因即为不支持上述类型。

问题分析

缺少JSON和JSONB参数类型的支持

解决方案

为了更好地支持用户的行为,提升KES的可使用性,并能够兼容Oracle数据库,在支持JSON_EQUAL表达式的基础之上添加了表达式支持json和jsonb两种参数类型。其中,表达式的两个参数位置均可支持json和jsonb两种参数,具体使用案例如下所示:

两个输入均为json与jsonb类型:

select json_equal('{"uzi":1}'::json,'{"uzi":2}'::jsonb error on error);

select json_equal('{"uzi":1}'::json,'{"uzi":2}'::json);

select json_equal(jsonb'{"uzi":1}',jsonb'{"uzi":1}');

select json_equal(jsonb'{"uzi":1}',json'{"uzi":1}' error on error);

select json_equal('1'::json,'1'::json);

select json_equal('{"uzi":1}'::varchar::jsonb,'{"uzi":2}'::varchar::jsonb);

select json_equal(lower('{"A":1}')::jsonb,'{"a":2}'::jsonb);

select json_equal('[1,2]'::json,'[1,2]'::json);

其中一个为json或jsonb类型

select json_equal('1','{"a":[1,2]}'::json);

select json_equal('false','{"a":[1,2]}'::json);

select json_equal('{"a":[1,2]}'::json,null);

select json_equal('1'::json,'1');

参考资料

《KingbaseES SQL语言参考手册》

相关推荐
盒马coding8 分钟前
PostgreSQL18新功能COPY命令变得更加用户友好
数据库·postgresql
️️(^~^)23 分钟前
触发器,存储过程
数据库
罗光记29 分钟前
Quantinuum 发布新型量子计算机“Helios“
数据库·经验分享·其他·百度·twitter
友友马1 小时前
『 数据库 』MySQL索引深度解析:从数据结构到B+树的完整指南
数据库·mysql
SelectDB1 小时前
替换 ClickHouse,查询并发提升 7 倍!高途教育基于阿里云 SelectDB 构建秒级实时报表
数据库·apache
JamSlade1 小时前
优化用户体验的小点:乐观更新链路 双数据库查询
数据库·ux
一 乐2 小时前
个人博客|博客app|基于Springboot+微信小程序的个人博客app系统设计与实现(源码+数据库+文档)
java·前端·数据库·spring boot·后端·小程序·论文
小二·2 小时前
用 eBPF 实现 MySQL 慢查询实时追踪(终极实战版):零侵入、毫秒级、全上下文捕获
数据库·mysql·adb
云飞云共享云桌面2 小时前
三维设计办公资源如何共享集中和安全管控?
运维·服务器·数据库·安全·自动化·制造
百锦再3 小时前
大型省级政务平台采用金仓数据库(KingbaseES)
开发语言·数据库·后端·rust·eclipse