操作場景
RDS for PostgreSQL支持(chi)通過界面升(sheng)級(ji)引擎大版本(ben),目前支持(chi)以(yi)下兩種升(sheng)級(ji)方式:
不割接模式:用(yong)于新版(ban)本業(ye)務(wu)兼容性測試(shi)。大版(ban)本升(sheng)級可能導致(zhi)業(ye)務(wu)兼容性問(wen)題,強烈建議業(ye)務(wu)進(jin)行充分兼容性測試(shi),測試(shi)通(tong)過后,再進(jin)行割接模式升(sheng)級。使(shi)用(yong)不割接模式升(sheng)級,不會影響(xiang)原(yuan)實例。
割(ge)(ge)接(jie)模式:割(ge)(ge)接(jie)升(sheng)級過程中,原實例會設置為(wei)只讀,并存在業務(wu)分鐘級閃斷(duan)。升(sheng)級完(wan)成后,會自(zi)動交換實例VIP,業務(wu)無需更(geng)改(gai),即可完(wan)成升(sheng)級。
功能約束限制
以下版本的實例支持進行大版本升級:
? 對于PostgreSQL 9.5版本,小版本為9.5.25及以上。
? 對于PostgreSQL 9.6版本,小版本為9.6.24及以上。
? 對于PostgreSQL 10版本,小版本為10.21及以上。
? 對于PostgreSQL 12版本,小版本為12.7及以上。
? 對于PostgreSQL 13版本,小版本為13.3及以上。
? 對于PostgreSQL 14版本,小版本為14.4及以上。
? 對于PostgreSQL 15版本,小版本為15.4及以上。
? 對于PostgreSQL 11版本,不支持大版本升級。由于操作系(xi)統限制,部(bu)分(fen)實例(li)暫不(bu)支持進行大(da)版本(ben)升(sheng)級(ji),具(ju)體(ti)可升(sheng)級(ji)版本(ben)查看(kan)界面可升(sheng)級(ji)列(lie)表。
災備實例不(bu)支持大版本升級(ji)。
大(da)(da)版本(ben)升級前,需要先進行升級檢查(cha),如果在有效期(qi)內沒有檢查(cha)成(cheng)功的(de)報告,則不(bu)允許(xu)進行大(da)(da)版本(ben)升級。
升級插件限制說明
在大版本(ben)升級(ji)檢查成功后,如果大版本(ben)升級(ji)路徑(jing)中(zhong),實例安(an)裝有(you)下(xia)表中(zhong)的(de)插(cha)件(jian),需(xu)要提前卸(xie)載,在大版本(ben)升級(ji)完(wan)成后再重新安(an)裝。否則(ze),會導致(zhi)實例升級(ji)失敗,或者實例升級(ji)后由于(yu)插(cha)件(jian)無法升級(ji)導致(zhi)插(cha)件(jian)不能正常使用。
表 插件限制說明
| 源版本 | 目標版本 | 導致實例升級失敗的插件 | 實例升級后無法正常使用的插件 |
|---|---|---|---|
| 12 | 13 | orafce, postgis_sfcgal | address_standardizer_data_us, pgaudit |
| 14 | orafce, postgis_sfcgal | anon, pgaudit | |
| 15 | orafce, postgis_sfcgal | anon, pgaudit | |
| 16 | orafce, postgis_sfcgal, pgl_ddl_deploy | anon, pgaudit | |
| 13 | 14 | - | anon, pgaudit,pg_stat_kcache |
| 15 | - | anon, pgaudit,pg_stat_kcache | |
| 16 | pgl_ddl_deploy | anon, pgaudit,pg_stat_kcache | |
| 14 | 15 | - | pgaudit,pg_stat_kcache |
| 16 | pgl_ddl_deploy | pgaudit,pg_stat_kcache | |
| 15 | 16 | pgl_ddl_deploy | pgaudit |
注意事項
如(ru)果要升級到PostgreSQL 15或(huo)者(zhe)PostgreSQL16版本,需要確保OS為HCE鏡像。否則(ze)在大(da)版本頁(ye)面無(wu)法選(xuan)擇目(mu)標版本。
割(ge)接模(mo)式下,大版本(ben)升級(ji)完成(cheng)后(hou),若(ruo)發現業務不兼容,需要回退。
注意
升級完成后新增的(de)數據,原(yuan)實例(li)不會進(jin)行自動(dong)同步。
大版本升(sheng)級完成后,會新建一個實(shi)例(li),原有實(shi)例(li)依(yi)然(ran)保留并計(ji)費,在業(ye)務穩定(ding)后您可以選擇釋放原有實(shi)例(li)。
大版本升級后(hou),原實(shi)(shi)例的(de)審(shen)計日志、錯(cuo)誤日志、慢(man)日志仍(reng)保(bao)留在(zai)原實(shi)(shi)例,新實(shi)(shi)例只能查看該實(shi)(shi)例后(hou)續生成的(de)日志記錄(lu)。
大版本升級后,如果原(yuan)實(shi)例開啟(qi)磁盤(pan)加(jia)密,新實(shi)例會同步開啟(qi)磁盤(pan)加(jia)密。
只讀實例無法進行大版本升級。若當前實例存在只讀實例,大版本升級完成后,只讀實例不會同步升級,需要重新創建,請參見創建只讀實例。
大版本升(sheng)級會有(you)以(yi)下影響:
? 使用(yong)割(ge)接(jie)(jie)方式升(sheng)級,升(sheng)級過(guo)程(cheng)中,原實例會(hui)設置為只讀,并造(zao)成(cheng)業務(wu)分鐘(zhong)級閃斷,請在業務(wu)低峰期(qi)進(jin)行升(sheng)級。使用(yong)不(bu)割(ge)接(jie)(jie)方式升(sheng)級時,沒有任(ren)何影響。
注意
只讀設置通(tong)過參數“default_transaction_read_only”控制,請檢查業務(wu)中是否存在修改參數“default_transaction_read_only”的情況(kuang),如果存在,則會導致在割(ge)接期間實例(li)插入(ru)的數據在升(sheng)級(ji)完成(cheng)后丟失。
? 大(da)版(ban)本升級完成后,參數有以下變化:
原實例中修(xiu)改(gai)的參(can)數,自動同步修(xiu)改(gai)到新版(ban)本(ben);沒(mei)有修(xiu)改(gai)的參(can)數將使用新版(ban)本(ben)默認參(can)數值。
如果原(yuan)實例使用(yong)了新(xin)版本不支持的參(can)數,新(xin)版本會自(zi)動刪除。
如果(guo)原實例中(zhong)參數(shu)取值不在新版本(ben)對應(ying)參數(shu)的合法區間,新版本(ben)中(zhong)使用參數(shu)模(mo)板默認值。
大版本升級不會升級插件版本,參考支持的插件列表,若新(xin)(xin)版本支持更高版本的(de)插(cha)件,您(nin)可(ke)使用命令ALTER EXTENSION extension_name UPDATE TO 'new_version';更新(xin)(xin)插(cha)件,或(huo)者卸載并(bing)重(zhong)新(xin)(xin)安裝最新(xin)(xin)版本插(cha)件。
注意
當數據庫進行大版本升級時,部分已安裝的插件會導致升級任務失敗,請先卸載相關插件后再進行大版本升級。
不支持大版本升級的插件包括(kuo):postgis
操作步驟
步驟 1 登錄管理控制臺。
步驟 2 單擊管理控制臺左上角的 ,選擇區域。
步驟 3 選(xuan)擇“數據庫(ku) > 關系型數據庫(ku)”。進入關系型數據庫(ku)信息頁面(mian)。
步驟 4 在實例列(lie)表,單擊實例名稱,進入(ru)實例的(de)基本信(xin)息頁面。
步驟 5 在左側導航(hang)欄,選擇“大版本(ben)升級(ji)”。
步驟 6 在“大版本升(sheng)級”頁簽,選擇目標升(sheng)級版本,單擊“立(li)即(ji)檢查”,等(deng)待幾分(fen)鐘(zhong)。
說明
升級(ji)檢查(cha)成功后,如果有(you)新創建插件,可能會因為不兼(jian)容,導致升級(ji)失敗,建議重新進行升級(ji)檢查(cha)。
若升(sheng)級檢(jian)查(cha)(cha)(cha)失敗,您(nin)可在(zai)檢(jian)查(cha)(cha)(cha)歷史中查(cha)(cha)(cha)看升(sheng)級檢(jian)查(cha)(cha)(cha)報(bao)告(gao),根據報(bao)告(gao)內容修改數據中存在(zai)的不(bu)兼容情況。
步驟 7 檢查(cha)成功后,單擊(ji)“下一步”,進(jin)入升級頁面(mian),確認升級注意事(shi)項后,單擊(ji)“立即升級”,進(jin)行大版本升級。
步驟 8 選(xuan)擇是否割(ge)接,以(yi)及(ji)統計信息收集模(mo)式。
說明
大版(ban)本升級(ji)(ji)時,不會自動同步優化(hua)器統(tong)計信(xin)(xin)息,因此需要在升級(ji)(ji)完成后進行統(tong)計信(xin)(xin)息收集。
割接前收集(ji):可以保證業務穩(wen)定性。如果(guo)實例數(shu)據量(liang)太大可能會導(dao)致升級時間(jian)較(jiao)久。
割接后(hou)收集:實例升級(ji)速度(du)較(jiao)快。升級(ji)后(hou)訪(fang)問未生成(cheng)統(tong)計(ji)信(xin)息的表可(ke)(ke)能導致(zhi)(zhi)執行計(ji)劃不準(zhun)確,業務高峰(feng)期還可(ke)(ke)能導致(zhi)(zhi)數(shu)據(ju)庫宕機。
----結束
查看升級檢查報告和升級報告
當升級(ji)檢查(cha)失敗或升級(ji)失敗時,可通過升級(ji)檢查(cha)報告或升級(ji)報告來(lai)分析失敗的原因,步驟如下:
1. 查看(kan)“pg_upgrade_internal.log”。
“pg_upgrade_internal.log”為升(sheng)級(ji)檢查(cha)報(bao)告(gao)(gao)或升(sheng)級(ji)報(bao)告(gao)(gao)的主要日志文(wen)(wen)件(jian),當(dang)操作失敗,首先查(cha)看該文(wen)(wen)件(jian)內容,查(cha)看相關(guan)報(bao)錯(cuo)。常見的報(bao)錯(cuo)如(ru)下:
? A list of problem libraries is in the file: loadable_libraries.txt
存在(zai)高版(ban)本不兼容的插件(jian),插件(jian)列表記錄在(zai)“loadable_libraries.txt”文件(jian)中。
? A list of tables with the problem is in the file: tables_with_oids.txt
建表時聲明(ming)了WITH OIDS,該聲明(ming)在(zai)PostgreSQL 12或以上版本不(bu)支持(chi),相(xiang)關表被記錄(lu)在(zai)“tables_with_oids.txt”文件中。
? Consult the last few lines of "pg_upgrade_server.log" for the probable cause of failure.
升級檢查時,高版本啟動失敗,具體原因在“pg_upgrade_server.log”報告項中查看。
? Consult the last few lines of "pg_upgrade_dump_xxxx.log" for the probable cause of failure.
升級過程中,pg_dump失敗,具體原(yuan)因在“pg_upgrade_dump_xxxx.log”報告項(xiang)中查看。
2. 根(gen)據“pg_upgrade_internal.log”中的(de)信(xin)息,在(zai)對應的(de)報告項中分析原因(yin)。
? loadable_libraries.txt
展示不(bu)兼容的(de)(de)library,通常對應了不(bu)兼容的(de)(de)插件(jian)。排查(cha)“loadable_libraries.txt”中列(lie)出的(de)(de)插件(jian),根據(ju)實(shi)際需(xu)要進行評估是否刪除,建議在不(bu)影響業務(wu)穩定的(de)(de)情況下刪除后(hou)升級。
? tables_with_oids.txt
展示聲明了WITH OIDS的(de)表清(qing)單。排查(cha)“tables_with_oids.txt”中(zhong)列(lie)出的(de)表,評估業(ye)務代碼(ma)中(zhong)是否對OID有(you)依(yi)賴,確認(ren)不影響(xiang)業(ye)務之后,執(zhi)行以(yi)下SQL:
ALTER TABLE {table_name} SET WITHOUT OIDS;? pg_upgrade_server.log
查看“pg_upgrade_server.log”的(de)最(zui)后(hou)(hou)幾(ji)行(xing)信息,如果(guo)存(cun)在如下報錯,則說明高版本中不(bu)存(cun)在xxx插(cha)件(jian),根據實際業務,評(ping)估(gu)可刪除xxx插(cha)件(jian),并在shared_preload_libraries中刪除xxx,建議在不(bu)影響(xiang)業務穩(wen)定的(de)情況下刪除后(hou)(hou)升(sheng)級。
FATLA: could not access file "xxx": No such file or directory.示例:
FATLA: could not access file "pg_pathman": No such file or directory.? pg_upgrade_dump_xxxx.log
查看(kan)“pg_upgrade_dump_xxxx.log”最后幾行(xing)信息,如果存在如下報(bao)錯,則說明(ming)當前(qian)實例中表的數量過多,按照(zhao)提示需適當增加max_locks_per_transaction參數值(zhi),并重新升級(ji)。
pg_dump: error: query failed: ERROR: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
pg_dump:error: query was: LOCK TABLE "xxx"."xxx" IN ACCESSSHARE MODE查(cha)(cha)看“pg_upgrade_dump_xxxx.log”最后(hou)幾行信息(xi),如果存在(zai)(zai)如下報錯,是因為(wei)當前實例中存在(zai)(zai)插件pgl_ddl_deploy,該插件高低版本不兼(jian)容,導致升級(ji)(ji)失敗。請根據升級(ji)(ji)插件限(xian)制說明排查(cha)(cha)實例中是否存在(zai)(zai)其(qi)他不兼(jian)容的(de)三方(fang)(fang)插件(部分三方(fang)(fang)插件的(de)兼(jian)容性(xing)無法(fa)通過(guo)升級(ji)(ji)檢查(cha)(cha)識別出來),根據實際需(xu)要進(jin)行評估是否刪(shan)(shan)除,建(jian)議在(zai)(zai)不影(ying)響業務穩定的(de)情(qing)況下刪(shan)(shan)除后(hou)升級(ji)(ji)。
pg_restore: error: could not execute query: ERROR: could not find function "xxx" in file xxx
Command was: CREATE FUNCTION "pgl_ddl_deploy"."xxx"