本文介紹RDS PostgreSQL大版本升級檢查報告的內容詳情、常見報錯以及處理方式。
相關升級文檔
檢查項
在控制台大版本升級頁的升级检查頁簽,單擊目標檢查報告的查看資訊,以查看其詳細內容。
檢查報告中的檢查模組及可能出現的報錯如下所示:
警告
檢查內容
大版本升級時,源執行個體的唯讀時間、所需的記憶體和磁碟資源會受到資料庫物件數量的影響。如果執行個體的資料庫物件數量過多,而磁碟和記憶體資源不足,可能會導致升級失敗。在此情況下,系統將在警告欄中提供推薦記憶體、最小推薦記憶體以及推薦磁碟大小。
使用零停機方案進行升級時,系統還會對Sequence表數量進行檢查。
推薦記憶體:在大版本升級過程中,系統能夠對包含多個資料庫的執行個體提供並發升級功能。因此,當執行個體的記憶體大於或等於推薦記憶體,將以最快的速度進行升級,以盡量減少執行個體的唯讀時間。
最小推薦記憶體:執行個體記憶體大於等於最小推薦記憶體時,不會因為記憶體資源不足導致升級失敗。執行個體的唯讀時間並不一定是最短的,因為系統將對每個資料庫進行串列升級。
推薦磁碟大小:在大版本升級過程中,系統會臨時複製所有對象定義,這將導致inode的消耗增加一倍。如果升級時的磁碟空間不足以滿足推薦的磁碟大小,可能會導致升級失敗。
Sequence表數量檢查(僅針對零停機方式):在零停機大版本升級過程中,資料通過邏輯複製進行同步。然而,邏輯複製並不支援對Sequence表的同步,因此需設定一個短暫的切換時間以完成Sequence表的同步。在零停機大版本升級中,切換時間的長短由Sequence表的數量所決定。
警告與解決辦法
磁碟警告
警告格式:
總磁碟空間: {*} GB; 已使用磁碟: {*} GB; 已使用inode: {*}; bytes-per-nodes: {*}; 升級需要最少磁碟空間: {*} GB。可能原因:對象數量過多,需要足夠大小的磁碟空間。
解決辦法:
對於藍綠部署,在配置升級參數時,新執行個體的儲存空間必須大於或等於進行升級所需的最小磁碟空間。
對於本地升級,在升級前應對源執行個體進行儲存空間的擴容,擴容後的儲存空間必須大於或等於進行升級所需的最小磁碟空間。詳情請參見變更配置。
記憶體警告
警告格式:
當前記憶體: {*} GB; 推薦記憶體: {*} GB; 最低記憶體: {*} GB。可能原因:對象數量過多,需確保擁有足夠的記憶體,以最大程度地減少在升級過程中執行個體的唯讀時間。
解決辦法:
對於藍綠部署,在配置升級參數時,新執行個體規格中的記憶體必須大於或等於最低記憶體要求。
對於本地升級,如果執行個體規格小於推薦記憶體,需要在升級前對源執行個體進行升配。詳情請參見變更配置。
訂閱警告
警告格式:
執行個體存在複製槽訂閱端,為防止訂閱資料不一致,建議查看阿里雲協助文檔。可能原因:執行個體中存在複製槽訂閱端,您可以通過執行
select * from pg_subscription;進行查看。解決辦法:參見升級資料庫大版本,進行處理。
Sequence警告
警告格式:
Sequence表總數:{0},過多Sequence表會延長邏輯複製大版本升級的切換時間。可能原因:執行個體中存在Sequence表,通過執行
select * from pg_sequences;可以查看所有資料庫中的Sequence表。解決辦法:如果Sequence表數量過多,建議使用複製執行個體進行切換時間的測試,以確保切換時間符合需求。
錯誤
檢查內容
檢查是否存在後台添加的多餘超級帳號或者加密方式不正確的普通帳號。
預檢查是否失敗。如若失敗,檢查報告將顯示“pg_upgrade錯誤記錄檔”項。
是否在pg_catalog schema中安裝了pgcrypto外掛程式。
(僅針對零停機方式)執行個體核心的小版本是否為20250228及之後的版本。
(僅針對零停機方式)邏輯複製的不相容項。邏輯複製無法同步某些資料庫物件,因而存在這些對象的執行個體將無法支援零停機的大版本升級。如若存在不相容項,檢查報告將顯示“邏輯複製不相容項”項。
錯誤與解決辦法
帳號錯誤
錯誤格式:
無效超級賬戶:{*};無效賬戶:{*}; 請查看阿里雲協助文檔。可能原因:存在冗餘的超級帳號或者存在異常的普通帳號。
解決辦法:
對於冗餘的超級帳號,請提工單聯絡售後服務刪除。
對於異常的普通帳號,請重設報錯帳號的密碼。
預檢查錯誤
錯誤格式:
pg_upgrade預檢查任務失敗, 需要查看[pg_upgrade錯誤記錄檔]以及[pg_upgrade相關檔案與報錯]。可能原因:預檢查失敗。
解決辦法:請參照pg_upgrade錯誤記錄檔,解決日誌問題。
pgcrypto外掛程式錯誤
錯誤格式:
在資料庫:{*}中的schema:pg_catalog中安裝了pg_crypto外掛程式,請查看阿里雲協助文檔。可能原因:由於pgcrypto在pg_catalog中建立了僅在高版本中存在的函數,導致了大版本升級的失敗。
解決辦法:刪除每個資料庫中的pgcrypto外掛程式,然後在非pg_catalog schema中建立該外掛程式。
小版本錯誤
錯誤格式:
零停機大版本升級最低小版本20250228。可能原因:執行個體核心小版本過低。
解決辦法:升級核心小版本。
pg_upgrade錯誤記錄檔
檢查內容
檢查大版本間是否存在不相容的外掛程式、關鍵字等。
常見報錯
pg_upgrade相關檔案與報錯
loadable_libraries.txt
展示不相容的library,通常對應了不相容的外掛程式。
如下是常見的不相容外掛程式及解決辦法:
tables_with_oids.txt
展示聲明了WITH OIDS的表清單。
邏輯複製不相容項
檢查內容
檢查是否存在外部表格。
檢查是否存在缺乏主鍵或唯一鍵的表。
檢查是否存在物化視圖。
檢查是否存在大對象。
檢查是否存在邏輯複製禁止外掛程式。
檢查邏輯複製要求的相關參數取值是否滿足要求。
不相容項和解決辦法
外部表格不相容
錯誤格式:
外部表格所在庫:{0}。總共庫:{1}。可能原因:存在外部表格。
解決辦法:刪除外部表格。
在執行個體的每個資料庫中執行以下SQL,擷取外部表格的資訊。
SELECT COUNT(*) AS count, relkind FROM pg_class WHERE relkind IN ('f') GROUP BY relkind;執行以下SQL語句刪除外部表格。
DROP FOREIGN TABLE [ IF EXISTS ] name [ CASCADE | RESTRICT ];
更多資訊請參見社區文檔。
沒有唯一鍵表不相容
錯誤格式:
沒有主鍵或者唯一鍵的表所在庫:{0}。總共庫:{1}。可能原因:存在沒有主鍵或者唯一鍵的表。
解決辦法:為表增加主鍵或者唯一鍵。
在執行個體的每個資料庫中執行以下SQL,擷取沒有主鍵或者唯一鍵的表資訊。
SELECT COUNT(*) AS count FROM information_schema.tables t LEFT JOIN information_schema.table_constraints tc ON t.table_name = tc.table_name AND t.table_schema = tc.table_schema AND (tc.constraint_type = 'PRIMARY KEY' OR tc.constraint_type = 'UNIQUE') JOIN pg_class c ON t.table_name = c.relname JOIN pg_namespace ns ON c.relnamespace = ns.oid AND ns.nspname = t.table_schema WHERE t.table_type = 'BASE TABLE' AND tc.constraint_type IS NULL AND t.table_schema NOT IN ('pg_catalog', 'information_schema') AND c.relreplident != 'f';執行以下SQL,將目標表的
REPLICA IDENTITY設定為FULL。ALTER TABLE name REPLICA IDENTITY FULL;執行以下SQL,為目標表增加主鍵或者唯一鍵。
--主鍵約束 ALTER TABLE name ADD CONSTRAINT constrain_name PRIMARY KEY (column_name); --唯一鍵約束 ALTER TABLE name ADD CONSTRAINT constrain_name UNIQUE (column_name);
更多資訊請參見社區文檔。
物化視圖不相容
錯誤格式:
物化視圖所在庫:{0}。總共庫:{1}。可能原因:存在物化視圖。
解決辦法:刪除物化視圖。
在執行個體的每個資料庫中執行以下SQL,擷取物化視圖。
SELECT COUNT(*) AS count, relkind FROM pg_class WHERE relkind IN ('m') GROUP BY relkind;執行以下SQL,刪除物化視圖。
DROP MATERIALIZED VIEW IF EXISTS name;
大對象不相容
錯誤格式:
大對象所在庫:{0}。總共庫:{1}。可能原因:存在大對象。
解決辦法:刪除大對象。
在執行個體的每個資料庫中執行以下SQL,擷取大對象。
SELECT COUNT(*) AS count FROM pg_largeobject_metadata;執行以下SQL,刪除大對象。
SELECT lo_unlink(largeobject_oid);
外掛程式不相容
錯誤格式:
邏輯複製禁止外掛程式所在庫:{0}。總共庫:{1}。可能原因:使用了當前禁止的以下四個外掛程式:'pg_partman'、'pg_cron'、'pg_active' 和 'pg_logical'。
解決辦法:臨時刪除不相容外掛程式。
在執行個體的每個資料庫中執行以下SQL,查看是否安裝了不相容外掛程式。
SELECT COUNT(*) AS count FROM pg_extension WHERE extname IN ('pg_partman', 'pg_cron', 'pg_active', 'pglogical');臨時刪除不相容外掛程式。
DROP EXTENSION extension_name;
參數不相容
錯誤格式:
邏輯複製要求wal_level為logical,max_wal_sender以及max_replication_slots至少為{0},執行個體wal_level為:{1}, max_wal_sender為:{2}, max_replication_slots為:{3}。可能原因:三個參數的取值未能滿足需求。
解決辦法:修改參數值。請注意,可能需要重啟執行個體以使更改生效。詳情請參見設定執行個體參數。
檢查報告格式說明
檢查報告將同時提供中文和英文內容,請根據需要選擇適合的語言進行查看。