全部產品
Search
文件中心

ApsaraDB RDS:解讀RDS PostgreSQL大版本升級檢查報告

更新時間:Jul 10, 2025

本文介紹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錯誤記錄檔

檢查內容

檢查大版本間是否存在不相容的外掛程式、關鍵字等。

常見報錯

A list of problem libraries is in the file: loadable_libraries.txt

可能原因

存在高版本不相容的外掛程式,相關外掛程式被記錄在loadable_libraries.txt檔案中。

解決辦法

排查loadable_libraries.txt報告項中列出的外掛程式,根據實際需要進行評估是否刪除,建議在不影響業務穩定的情況下刪除後升級。各版本支援的外掛程式列表請參見:支援外掛程式列表

A list of tables with the problem is in the file: tables_with_oids.txt

可能原因

建表時聲明了WITH OIDS,該聲明在PostgreSQL 12或以上版本不支援,相關表被記錄在tables_with_oids.txt檔案中。

解決辦法

  • 方法一(推薦):升級到PostgreSQL 11版本,該版本支援聲明WITH OIDS

  • 方法二:排查loadable_libraries.txt報告項列出的表,請自行評估業務代碼是否對OID有依賴,確認不影響業務之後,執行以下語句:

    ALTER TABLE {table_name} SET WITHOUT OIDS;

pg_upgrade相關檔案與報錯

loadable_libraries.txt

展示不相容的library,通常對應了不相容的外掛程式。

如下是常見的不相容外掛程式及解決辦法:

pgrouting外掛程式

可能原因

選定的高版本中不支援pgrouting外掛程式。

解決辦法

根據實際需要進行評估是否刪除,建議在不影響業務穩定的情況下刪除後升級。各版本支援的外掛程式列表請參見:支援外掛程式列表

jsonbx外掛程式

可能原因

PostgreSQL 9.4對JSON類型支援不完善,需要jsonbx外掛程式支援,PostgreSQL 10或以上版本原生支援JSON,沒有該外掛程式。

解決辦法

請在高版本中驗證jsonbx外掛程式的相關函數使用,根據實際需要進行評估是否刪除外掛程式,然後在不影響業務穩定的情況下刪除後再升級。

jsonbx外掛程式函數使用差異如下:

函數用法

PostgreSQL 9.4執行結果

PostgreSQL 10或以上版本執行結果

select '{"a":1, "b":2, "c":3}'::jsonb - 2;

{"a": 1, "b": 2}

ERROR: cannot delete from object using integer index

select jsonb_delete('{"a":1, "b":2, "c":3}'::jsonb, '{b}'::text[]);

{"a": 1, "c": 3}

ERROR: function jsonb_delete(jsonb, text[]) does not exist

select '{"a":{"c":1, "d":2}, "b":3}'::jsonb - '{a, c}'::text[];

{"a": {"d": 2}, "b": 3}

{"b": 3}

postgis、postgis_topology外掛程式

可能原因

postgis外掛程式版本過低,與選定的高版本lib庫不匹配,升級檢查失敗。

解決辦法

重要

postgis外掛程式各版本間存在差異(例如wkt格式的解析報錯不同),升級後可能影響業務處理,建議在升級postgis外掛程式前,先複製當前執行個體,在複製執行個體中對postgis外掛程式進行升級測試,完全符合業務需求後,再在原執行個體中升級postgis外掛程式。複製的具體操作,請參見備份PostgreSQL資料恢複PostgreSQL資料

  1. 升級核心小版本。更多資訊,請參見升級核心小版本

  2. 更新報錯提示的postgis外掛程式。更多資訊,請參見PostGIS外掛程式升級

  3. 執行\dx命令查詢外掛程式版本,確保postgis外掛程式版本至少為3.3.2。

  4. 重新進行升級檢查。

    重要

    不同PostgreSQL執行個體版本安裝postgis、postgis_topology或pgrouting外掛程式後,升級大版本存在如下限制:

    • PostgreSQL 9.4:暫時僅支援升級到PostgreSQL 10或11。

    • PostgreSQL 10:暫時僅支援升級到PostgreSQL 11。

    • PostgreSQL 11、12和13:暫不支援升級。

tables_with_oids.txt

展示聲明了WITH OIDS的表清單。

邏輯複製不相容項

檢查內容

  • 檢查是否存在外部表格。

  • 檢查是否存在缺乏主鍵或唯一鍵的表。

  • 檢查是否存在物化視圖。

  • 檢查是否存在大對象。

  • 檢查是否存在邏輯複製禁止外掛程式。

  • 檢查邏輯複製要求的相關參數取值是否滿足要求。

不相容項和解決辦法

外部表格不相容

  • 錯誤格式外部表格所在庫:{0}。總共庫:{1}

  • 可能原因:存在外部表格。

  • 解決辦法:刪除外部表格。

    1. 在執行個體的每個資料庫中執行以下SQL,擷取外部表格的資訊。

      SELECT COUNT(*) AS count, relkind
      FROM pg_class WHERE relkind IN ('f') GROUP BY relkind;
    2. 執行以下SQL語句刪除外部表格。

      DROP FOREIGN TABLE [ IF EXISTS ] name [ CASCADE | RESTRICT ];

    更多資訊請參見社區文檔

沒有唯一鍵表不相容

  • 錯誤格式沒有主鍵或者唯一鍵的表所在庫:{0}。總共庫:{1}

  • 可能原因:存在沒有主鍵或者唯一鍵的表。

  • 解決辦法:為表增加主鍵或者唯一鍵。

    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';
    2. 執行以下SQL,將目標表的REPLICA IDENTITY設定為FULL

      ALTER TABLE name REPLICA IDENTITY FULL;
    3. 執行以下SQL,為目標表增加主鍵或者唯一鍵。

      --主鍵約束
      ALTER TABLE name
          ADD CONSTRAINT constrain_name PRIMARY KEY (column_name);
      --唯一鍵約束
      ALTER TABLE name
          ADD CONSTRAINT constrain_name UNIQUE (column_name);

    更多資訊請參見社區文檔

物化視圖不相容

  • 錯誤格式物化視圖所在庫:{0}。總共庫:{1}

  • 可能原因:存在物化視圖。

  • 解決辦法:刪除物化視圖。

    1. 在執行個體的每個資料庫中執行以下SQL,擷取物化視圖。

      SELECT COUNT(*) AS count, relkind
      FROM pg_class
      WHERE relkind IN ('m')
      GROUP BY relkind;
    2. 執行以下SQL,刪除物化視圖。

      DROP MATERIALIZED VIEW IF EXISTS name;

大對象不相容

  • 錯誤格式大對象所在庫:{0}。總共庫:{1}

  • 可能原因:存在大對象。

  • 解決辦法:刪除大對象。

    1. 在執行個體的每個資料庫中執行以下SQL,擷取大對象。

      SELECT COUNT(*) AS count
      FROM pg_largeobject_metadata;
    2. 執行以下SQL,刪除大對象。

      SELECT lo_unlink(largeobject_oid);

外掛程式不相容

  • 錯誤格式邏輯複製禁止外掛程式所在庫:{0}。總共庫:{1}

  • 可能原因:使用了當前禁止的以下四個外掛程式:'pg_partman'、'pg_cron'、'pg_active' 和 'pg_logical'。

  • 解決辦法:臨時刪除不相容外掛程式。

    1. 在執行個體的每個資料庫中執行以下SQL,查看是否安裝了不相容外掛程式。

      SELECT COUNT(*) AS count
      FROM pg_extension 
      WHERE extname IN ('pg_partman', 'pg_cron', 'pg_active', 'pglogical');
    2. 臨時刪除不相容外掛程式。

      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}

  • 可能原因:三個參數的取值未能滿足需求。

  • 解決辦法:修改參數值。請注意,可能需要重啟執行個體以使更改生效。詳情請參見設定執行個體參數

檢查報告格式說明

檢查報告將同時提供中文和英文內容,請根據需要選擇適合的語言進行查看。