大家好,去年5月份開始到今年2月份,我們一共割接了40多套PG,今天就來聊一聊遇到的那些遷移和使用的“坑”。
希望這是一期不錯(cuò)的節(jié)目。
坑主駕到(一)
開發(fā)用to_date()的一定要注意,有可能查詢不出數(shù)據(jù),wrongresult
查詢結(jié)果不一致。Oracle能查出數(shù)據(jù),PG查出來數(shù)據(jù)為空。先來看看具體的截圖:
其實(shí)這原本是一個(gè)上百行的SQL,問題發(fā)生在此處定位需要不停的拆分和測(cè)試,我略微精簡(jiǎn)了一下。我們調(diào)整后的SQL如下。
會(huì)發(fā)現(xiàn)數(shù)據(jù)立馬有了。
其實(shí)這個(gè)問題很簡(jiǎn)單,Oracle使用的date類型是帶時(shí)分秒的,而Postgresql的date類型是不帶時(shí)分秒的。所以在Oracle遷移到PostgreSQL,轉(zhuǎn)換的時(shí)候都會(huì)把Date類型改造成Timestamp類型。
問題就在于PostgreSQL自帶了to_date函數(shù)。該函數(shù)的返回類型是PostgreSQL中的Date類型。
所以在上面就相當(dāng)于數(shù)據(jù)類型不一致,導(dǎo)致查不到數(shù)據(jù)。該問題解決辦法有兩種:
坑主駕到(二)
序列順序問題
這個(gè)問題是我們創(chuàng)建了序列,開發(fā)使用的時(shí)候發(fā)現(xiàn)序列產(chǎn)生的值居然比當(dāng)前序列最大值還要小。
這個(gè)問題的主要原因就是Oracle和PostgreSQL在序列上有差異,我們主要來觀察一下PG的行為:
1、先創(chuàng)建一個(gè)序列,起使值100,cache值20,會(huì)話A讀一下nextval。
2、接下類在開會(huì)話B,讀一下nextval,發(fā)現(xiàn)值變成了120。
注意按照Oracle數(shù)據(jù)庫的邏輯,此時(shí)序列的最大值已經(jīng)是120了。
3、返回到會(huì)話A,再次獲取nextval,發(fā)現(xiàn)值是101。
此時(shí)就出現(xiàn)了開發(fā)遇到的情況:序列產(chǎn)生的值居然比當(dāng)前序列最大值還要小。
大多數(shù)序列只要不存在時(shí)間依賴關(guān)系,使用上都沒問題。但是如果出現(xiàn)了數(shù)字小的序列一定要比數(shù)字大的序列時(shí)間早這種邏輯,就需要把序列的cache值設(shè)置成1。
坑主駕到(三)
substr函數(shù)結(jié)果不一致
PostgreSQL
Oracle
Substr函數(shù)的起使位置要從1開始,如果位置從0開始,雖然有數(shù)據(jù)但是和Oracle不一致。
坑主駕到(四)
事務(wù)問題
這個(gè)問題我對(duì)Oracle、MySQL、PostgreSQL做了詳盡的測(cè)試,結(jié)論就是
在Oracle和MySQL中,當(dāng)其他會(huì)話更新或刪除了選定的行時(shí),當(dāng)前會(huì)話在執(zhí)行事務(wù)之前將重新檢查最新的數(shù)據(jù)。PostgreSQL當(dāng)選定的行被其他會(huì)話更新或刪除時(shí),當(dāng)前會(huì)話將忽略這些行。
事務(wù)問題會(huì)導(dǎo)致出現(xiàn)數(shù)據(jù)刪除丟失。需要應(yīng)用程序側(cè)考慮這個(gè)問題進(jìn)行改造。
由于篇幅的原因,今天的“入坑到出坑”娛樂節(jié)目,暫時(shí)介紹到這里。文中如有錯(cuò)誤,請(qǐng)大神們幫忙把“坑”填了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/129996.html
摘要:順便補(bǔ)充一句,微信官方提供的判斷依舊不全面,最新出來的蘋果手機(jī)還沒有完全支持相關(guān)的坑可以在官方社區(qū)的問答中找到。 首次在這里寫點(diǎn)東西,還請(qǐng)各位大佬擔(dān)待點(diǎn)。 摘要:昨天的placeholder-class只是希望各位看官注意,而今天的textarea就絕對(duì)是一個(gè)超級(jí)大坑!而且如果看官手中沒有蘋果手機(jī)測(cè)試的話,這個(gè)可就真的是個(gè)坑了!為啥?難道要等到用戶向你反饋你們產(chǎn)品有bug???.......
摘要:今年歲,目前在某行業(yè)頭部企業(yè)任職測(cè)試負(fù)責(zé)人,管理人的測(cè)試團(tuán)隊(duì)。渾渾噩噩的年我年出生,年二本畢業(yè),專業(yè)是電子信息工程專業(yè)。轉(zhuǎn)行這年截止此時(shí)此刻,我已入坑近年時(shí)間,經(jīng)歷家互聯(lián)網(wǎng)公司,最近一份工作已有年之多,目前任職測(cè)試負(fù)責(zé)人。 ...
摘要:近期在做微信支付那方面的工作由于要在之前開發(fā)人員的基礎(chǔ)上進(jìn)行開發(fā)其中使用到了這個(gè)第方支付的。下面梳理下正常開發(fā)的流程請(qǐng)點(diǎn)擊下面的鏈接付款。結(jié)果總是提示必須是組鍵值對(duì)。主要是官方?jīng)]有提供明確的請(qǐng)求頭信息給我們導(dǎo)致我們一直在兜圈。 近期在做微信支付那方面的工作,由于要在之前開發(fā)人員的基礎(chǔ)上進(jìn)行開發(fā),其中使用到了ping++這個(gè)第3方支付的SDK。不得不說,ping++的SDK做的挺簡(jiǎn)單的,...
摘要:近期在做微信支付那方面的工作由于要在之前開發(fā)人員的基礎(chǔ)上進(jìn)行開發(fā)其中使用到了這個(gè)第方支付的。下面梳理下正常開發(fā)的流程請(qǐng)點(diǎn)擊下面的鏈接付款。結(jié)果總是提示必須是組鍵值對(duì)。主要是官方?jīng)]有提供明確的請(qǐng)求頭信息給我們導(dǎo)致我們一直在兜圈。 近期在做微信支付那方面的工作,由于要在之前開發(fā)人員的基礎(chǔ)上進(jìn)行開發(fā),其中使用到了ping++這個(gè)第3方支付的SDK。不得不說,ping++的SDK做的挺簡(jiǎn)單的,...
摘要:今天遇到一個(gè)一直認(rèn)為很簡(jiǎn)單的問題,真正接手后才知道這么可怕大體是這樣的,默認(rèn)動(dòng)態(tài)加載的應(yīng)該是自動(dòng)向下,當(dāng)遇到頁面最下面應(yīng)該自動(dòng)向上渲染。動(dòng)態(tài)生成的都是根據(jù)來監(jiān)聽獲取元素的信息。 今天遇到一個(gè)一直認(rèn)為很簡(jiǎn)單的問題,真正接手后才知道這么可怕 大體是這樣的,默認(rèn)動(dòng)態(tài)加載的card應(yīng)該是自動(dòng)向下,當(dāng)card遇到頁面最下面應(yīng)該自動(dòng)向上渲染。showImg(https://segmentfault...
閱讀 1459·2023-01-11 13:20
閱讀 1815·2023-01-11 13:20
閱讀 1267·2023-01-11 13:20
閱讀 2007·2023-01-11 13:20
閱讀 4227·2023-01-11 13:20
閱讀 2886·2023-01-11 13:20
閱讀 1489·2023-01-11 13:20
閱讀 3814·2023-01-11 13:20