资讯专栏INFORMATION COLUMN

Polardb运算符优化应用案例

IT那活儿 / 3136人阅读
Polardb运算符优化应用案例
[
应用报错
]


org.springframework.jdbc.BadSqlGrammarException:PreparedStatementCallback;

badSQL grammar [SELECT TO_CHAR(TRUNC(SYSDATE,dd)-TRUNC(op_time,dd))overday FROM tb_xxx_xxxx WHERE caseno=? ];

nestedexception is com.aliyun.polardb.util.PSQLException:

ERROR:function to_char(interval) does not exist

Hint:No function matches the given name and argument types. You might needto add explicit type casts.


--直连检查sql报错问题

polardb执行


oracle执行


报错信息需要类型转换,那就转换一下

告知开发侧看能否更改代码解决。


过了一会,开发发来截图,一个模块就有400多,工作量太大,影响进度,看来还得换其他办法。

[
解决思路
]


先看看查询实现原理:


1.trunc后返回类型是timestampwithout time zone


2.两个相减返回值interval类型


3.查看to_char输入和输出返回类型


通过上面3步可以明确知道之前修改新加DD实现的逻辑,但是应用侧整改工作量太大,不现实。


既然第3步工作量大,实现不了,那就在第1步或第2步上做做文章。


[
解决步骤
]


尝试修理第2步:

减号-的左右都是timestampwithout time zone,返回值类型就是interval


到这就明了了,自己定义一个函数timestamp_mi,让他返回值不是interval,而是text就ok啦。



下面开始解决问题:


1.日期格式相减功能实现的sql

SELECT(date_part(epoch,sysdate)-date_part(epoch,sysdate-10))/86400,pg_typeof(date_part(epoch,sysdate)-date_part(epoch,sysdate-10)/86400);


2.创建上面实现功能的sql对应的函数

语法如下:


createor replace function ywjhxt.timestamp_mi (timestamp without time zone,timestamp without time zone) returns double precision as $$

SELECT(date_part(epoch,$1)-date_part(epoch,$2))/86400;

$$language sql;


3.创建新的运算符实现逻辑

createoperator ywjhxt.-(leftarg=timestamp without timezone,rightarg=timestamp without timezone,procedure=ywjhxt.timestamp_mi);




4.检验是否实现功能


5.意外情况处理

奇了怪了,为啥没生效。继续分析,

查看操作符’-’信息:

selectoprname,oprleft::regtype,oprright::regtype,oprresult::regtype,oprcodefrom pg_operator where oprname=- andoprleft::regtype::text=timestamp without time zone andoprright::regtype::text=timestamp without time zone;  



原来有两个timestampwithout time zone的值进行相减时,有两个实现方式,为啥他选了第一个呢?


尝试去官方文档找答案,还真有。。。

再尝试一下,发现得到了想要的结果,但是这不符合需要啊,还是要改动应用代码。


继续往下翻文档,又有惊喜。

setsearch_path="$user", public,pg_catalog;



至此,问题彻底解决。本次分享到此结束,下次再见。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130154.html

相关文章

  • 达摩院首席数据库科学家李飞飞:云原生新战场,我们如何把握先机?

    摘要:李飞飞花名飞刀,阿里巴巴集团副总裁,高级研究员,达摩院首席数据库科学家,阿里云智能事业群数据库产品事业部负责人,杰出科学家。是阿里云的云原生数据库,目前已有非常深厚的技术积累。 阿里妹导读:云计算大潮来袭,传统数据库市场正面临重新洗牌的情境,包括云数据库在内的一批新生力量崛起,动摇了传统数据库的垄断地位,而由云厂商主导的云原生数据库则将这种改变推向了高潮。 云时代的数据库将面临怎样的...

    frolc 评论0 收藏0
  • 阿里云发布POLARDB,未来3年无自研数据库的云计算玩家将被淘汰

    摘要:近日,阿里云正式对外发布了全新一代自研关系型数据库。而他认为,在未来年内,没有自研数据库的云计算厂商将会被逐渐淘汰出局。 近日,阿里云正式对外发布了全新一代自研关系型数据库POLARDB。值得注意的是,POLARDB并不是基于开源数据库MySQL之上研发的分支,而且基于第三代分布式共享存储架构,创新实现企业级OLTP与OLAP一体化数据库系统整体设计。这意味着,在行业还在使用第一代,第二代架...

    FingerLiu 评论0 收藏0
  • 2021年8月国产数据库大事记

    摘要:本文整理了年月国产数据库大事件和重要产品发布消息。柏睿数据库加速安全卡面向全球重磅发布。月日,在全球数字经济大会成果发布会上,中国移动北京分公司与国产数据库领域新锐企业柏睿数据签署战略合作协议。本次大赛主要面向全国爱好数据库的高校学生。 本文整理了2021年8月国产数据库大事件和重要产品发布消息。目录8月国产数据库大事记TOP108月国产数据库大事记时间线产品/版本发布兼容认证8月排行榜新增...

    Scorpion 评论0 收藏0
  • “云”的力量崛起,数据库市场再起波澜

    摘要:不过,云来了,以阿里云为代表的云服务商携云原生数据库发起了新一轮挑战。实际上,阿里云数据库技术也得到国际咨询机构的认可,在数据库魔力象限中,阿里云成为国内首个入选的科技公司。第三个是数据的安全隐私保护,这是阿里云数据库一直不敢放松的。数据库市场形成今天的格局已经很久了,商业数据库为王,这几乎没有变过。不过,云来了,以AWS、阿里云为代表的云服务商携云原生数据库发起了新一轮挑战。与以往历次的挑...

    _ipo 评论0 收藏0
  • 阿里云发布POLARDB,未来3年无自研数据库的云计算玩家将被淘汰

    摘要:近日,阿里云正式对外发布了全新一代自研关系型数据库。而他认为,在未来年内,没有自研数据库的云计算厂商将会被逐渐淘汰出局。 近日,阿里云正式对外发布了全新一代自研关系型数据库POLARDB。值得注意的是,POLARDB并不是基于开源数据库MySQL之上研发的分支,而且基于第三代分布式共享存储架构,创新实现企业级...

    yexiaobai 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<