大家好,去年5月份开始到今年2月份,我们一共割接了40多套PG,今天就来聊一聊遇到的那些迁移和使用的“坑”。
希望这是一期不错的节目。
坑主驾到(一)
开发用to_date()的一定要注意,有可能查询不出数据,wrongresult
查询结果不一致。Oracle能查出数据,PG查出来数据为空。先来看看具体的截图:
其实这原本是一个上百行的SQL,问题发生在此处定位需要不停的拆分和测试,我略微精简了一下。我们调整后的SQL如下。
会发现数据立马有了。
其实这个问题很简单,Oracle使用的date类型是带时分秒的,而Postgresql的date类型是不带时分秒的。所以在Oracle迁移到PostgreSQL,转换的时候都会把Date类型改造成Timestamp类型。
问题就在于PostgreSQL自带了to_date函数。该函数的返回类型是PostgreSQL中的Date类型。
所以在上面就相当于数据类型不一致,导致查不到数据。该问题解决办法有两种:
坑主驾到(二)
序列顺序问题
这个问题是我们创建了序列,开发使用的时候发现序列产生的值居然比当前序列最大值还要小。
这个问题的主要原因就是Oracle和PostgreSQL在序列上有差异,我们主要来观察一下PG的行为:
1、先创建一个序列,起使值100,cache值20,会话A读一下nextval。
2、接下类在开会话B,读一下nextval,发现值变成了120。
注意按照Oracle数据库的逻辑,此时序列的最大值已经是120了。
3、返回到会话A,再次获取nextval,发现值是101。
此时就出现了开发遇到的情况:序列产生的值居然比当前序列最大值还要小。
大多数序列只要不存在时间依赖关系,使用上都没问题。但是如果出现了数字小的序列一定要比数字大的序列时间早这种逻辑,就需要把序列的cache值设置成1。
坑主驾到(三)
substr函数结果不一致
PostgreSQL
Oracle
Substr函数的起使位置要从1开始,如果位置从0开始,虽然有数据但是和Oracle不一致。
坑主驾到(四)
事务问题
这个问题我对Oracle、MySQL、PostgreSQL做了详尽的测试,结论就是
在Oracle和MySQL中,当其他会话更新或删除了选定的行时,当前会话在执行事务之前将重新检查最新的数据。PostgreSQL当选定的行被其他会话更新或删除时,当前会话将忽略这些行。
事务问题会导致出现数据删除丢失。需要应用程序侧考虑这个问题进行改造。
由于篇幅的原因,今天的“入坑到出坑”娱乐节目,暂时介绍到这里。文中如有错误,请大神们帮忙把“坑”填了。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129996.html
摘要:顺便补充一句,微信官方提供的判断依旧不全面,最新出来的苹果手机还没有完全支持相关的坑可以在官方社区的问答中找到。 首次在这里写点东西,还请各位大佬担待点。 摘要:昨天的placeholder-class只是希望各位看官注意,而今天的textarea就绝对是一个超级大坑!而且如果看官手中没有苹果手机测试的话,这个可就真的是个坑了!为啥?难道要等到用户向你反馈你们产品有bug???.......
摘要:今年岁,目前在某行业头部企业任职测试负责人,管理人的测试团队。浑浑噩噩的年我年出生,年二本毕业,专业是电子信息工程专业。转行这年截止此时此刻,我已入坑近年时间,经历家互联网公司,最近一份工作已有年之多,目前任职测试负责人。 ...
摘要:近期在做微信支付那方面的工作由于要在之前开发人员的基础上进行开发其中使用到了这个第方支付的。下面梳理下正常开发的流程请点击下面的链接付款。结果总是提示必须是组键值对。主要是官方没有提供明确的请求头信息给我们导致我们一直在兜圈。 近期在做微信支付那方面的工作,由于要在之前开发人员的基础上进行开发,其中使用到了ping++这个第3方支付的SDK。不得不说,ping++的SDK做的挺简单的,...
摘要:近期在做微信支付那方面的工作由于要在之前开发人员的基础上进行开发其中使用到了这个第方支付的。下面梳理下正常开发的流程请点击下面的链接付款。结果总是提示必须是组键值对。主要是官方没有提供明确的请求头信息给我们导致我们一直在兜圈。 近期在做微信支付那方面的工作,由于要在之前开发人员的基础上进行开发,其中使用到了ping++这个第3方支付的SDK。不得不说,ping++的SDK做的挺简单的,...
摘要:今天遇到一个一直认为很简单的问题,真正接手后才知道这么可怕大体是这样的,默认动态加载的应该是自动向下,当遇到页面最下面应该自动向上渲染。动态生成的都是根据来监听获取元素的信息。 今天遇到一个一直认为很简单的问题,真正接手后才知道这么可怕 大体是这样的,默认动态加载的card应该是自动向下,当card遇到页面最下面应该自动向上渲染。showImg(https://segmentfault...
阅读 1250·2023-01-11 13:20
阅读 1559·2023-01-11 13:20
阅读 1013·2023-01-11 13:20
阅读 1680·2023-01-11 13:20
阅读 3972·2023-01-11 13:20
阅读 2520·2023-01-11 13:20
阅读 1356·2023-01-11 13:20
阅读 3486·2023-01-11 13:20