人大金仓 金仓数据库KingbaseES 新特性——报错信息显示列名

金仓数据库KingbaseES 新特性——报错信息显示列名

1.产品新特性

KingbaseES数据库中,当插入或更新一条数据,超出长度后,报错提示信息只显示了列类型,如ERROR: value too long for type character varying(1),而不会显示列名。但是,当数据表中同样类型的列名有多个且长度限制条件相同时,不便用户迅速排查到具体的数据列,会为用户带来一定的困扰,不方便用户分辨出具体哪一列超长,所以希望当某一列超出长度后,报错提示信息能够具体指明是哪一列超长,而不仅仅是抛出字段长度。

2.Oracle与MySQL中的报错信息

通过对Oracle,MySQL数据库进行Insert和Update超长报错提示信息进行对比分析,我们发现了如下内容:

Oracle中Insert操作时候,当超出所设置的长度,报错提示信息会显示当前的用户名(Schema)、表名、列名以及当前实际长度和最大长度。

Oracle中Update操作时候,当超出所设置的长度,报错提示信息会显示当前的用户名(Schema)、表名、列名以及当前实际长度和最大长度。

MySQL中Insert操作时候,当超出所设置的长度,报错提示信息会显示列名以所在行数。MySQL中Update操作时候,当超出所设置的长度,报错提示信息会显示列名以所在行数。

为了方便用户迅速定位错误的数据列,在我们金仓数据库KingbaseES 产品中,对报错提示信息进行了优化改进,实现了在报错提示信息中显示列名的功能。

3.金仓数据库KingbaseES的实现方式

首先我们通过堆栈信息确认,长度报错是在查询规划模块pg_plan_queries中的preprocess_expression进行判断的。

第一步,将列名添加到FunctionCallInfoBaseData 的args结构后面,然后根据相应函数中是否有列名,来确定报错提示信息中是否显示。

第二步,在FuncExpr的args赋值的地方查看是否能够获取到列名,并将其添加到args列表中,将FuncExpr的args直接赋值给FunctionCallInfoBaseData 的args。

经过分析该阶段是在语义分析parse_analyze阶段的transformInsertRow,故在处理完FuncExpr完之后,能够通过ResTarget获取到列名,然后在通过makeConst函数将列名加入args的列表中,最后在相应函数中根据nargs个数进行选择使用。

最终在Kingbase ES中实现了这一功能,使得产品功能更加完善。金仓数据库始终坚持为用户着想,从用户角度解决实际问题,同时将始终坚持创新,提升产品质量,引领国产数据库越好又快向前发展,努力成为世界卓越的数据库产品与服务提供商。

更多信息,参见https://help.kingbase.com.cn/v8/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值