全部產品
Search
文件中心

ApsaraDB RDS:RDS PostgreSQL大版本升級

更新時間:Jun 06, 2025

隨著PostgreSQL社區對低版本(如9.4、10)執行個體的停止維護,繼續使用低版本執行個體將存在風險,如果您需要將低版本的RDS PostgreSQL執行個體升級到更高版本,或者希望使用高版本的新特性,建議您進行大版本升級操作。

方案簡介

PostgreSQL社區定期發布大版本,帶來功能和效能提升。較低版本將逐漸不再受支援,存在效能和安全風險。為了讓您享受新版本的提升,同時降低升級風險,RDS PostgreSQL支援大版本升級功能。

RDS PostgreSQL的大版本升級功能提供藍綠部署(割接/不割接)、本地升級零停機等升級模式。同時,支援使用DTS通過遷移執行個體的方式進行升級,各個升級方案的對比如下:

升級方案

藍綠部署(割接)

藍綠部署(不割接)

本地升級

零停機

使用DTS遷移執行個體

實現原理

通過雲端硬碟技術,恢複一個新執行個體,並使用pg_upgrade將其升級至目標版本。同時,支援自動切換原串連地址到新執行個體。

通過雲端硬碟技術,恢複一個新執行個體,並使用pg_upgrade將其升級至目標版本。

後台建立一個新執行個體(虛擬執行個體),並使用pg_upgrade將其升級到目標版本。同時,將原執行個體的所有元資訊完整重新整理到新執行個體中。

後台建立一個新執行個體(虛擬執行個體),並使用pg_upgrade將其升級到目標版本。同時,通過PostgreSQL的原生邏輯複製進行累加式更新。

手動建立新執行個體,並使用非同步邏輯複製進行資料移轉。

方案優點

  • 可基於原執行個體進行復原。

  • 提供驗證後自動切換串連地址的能力。

提供獨立的測試環境進行升級後驗證。

  • 原執行個體配置和賬單資訊完全保留。

  • 升級過程中,系統會自動提升執行個體規格,助力升級,升級完成會回退到原規格。

  • 用pg_upgrade升級執行個體時,無需停機。

  • 邏輯複製進行累加式更新時,使用同一個升級任務。

  • 升級過程中,系統會自動提升執行個體規格,助力升級,升級完成會回退到原規格。

  • 產品級解決方案。

  • 具備資料校正能力。

方案缺點

升級期間原執行個體將會被設定為唯讀,資料庫物件數越多,唯讀時間越長。

不切換串連地址,需要業務側自行配套。

  • 升級期間原執行個體將會被設定為唯讀,資料庫物件數越多,唯讀時間越長。

  • 不支援基於舊執行個體的復原,支援基於備份進行恢複復原。

  • 缺乏資料校正能力和反向資料鏈路。

  • 邏輯複製存在多項限制,例如表必須包含主鍵。

  • Sequence對象的數量影響切換所需的時間。

  • 一個資料庫一個遷移任務。

  • 無產品化切換串連地址的方案。

適用情境

可以接受升級期間執行個體唯讀,並且期望保留原執行個體。

  • 測實驗證。

  • 應用雙跑。

可以接受升級期間執行個體唯讀,並且期望升級後的執行個體與原執行個體一致。

業務不接受長時間停機。

  • 業務不接受長時間停機。

  • 執行個體中資料庫數量不多。

費用

建立執行個體隨用隨付。

建立執行個體隨用隨付。

無升級費用。

無升級費用。

  • 建立RDS執行個體的費用。

  • DTS執行個體費用。

功能特點

  • 支援跨版本升級:例如從PostgreSQL 10.0升級到PostgreSQL 13.0。

  • 支援升級演練:通過藍綠部署(不割接)的方式驗證升級流程,不影響原執行個體。

  • 支援平滑升級

    • 無需修改應用:通過藍綠部署(割接)、本地升級零停機方式升級,無需修改應用中已配置的資料庫連接地址。其中藍綠部署(割接)結束後,系統將會自動交換原執行個體與新執行個體的串連地址,而本地升級零停機將保持原執行個體的串連地址不變。

    • 幾乎零中斷零停機方式在升級時原執行個體幾乎不需要停機(停機時間極短,主要取決於執行個體中的Sequence數量以及大事務的寫入情況),從而顯著降低業務中斷帶來的風險。

    • 保留執行個體設定

      • 升級後保留原執行個體的白名單、參數設定、外掛程式(新版本不支援的外掛程式和參數除外)。

      • 加密執行個體升級大版本後仍為加密執行個體,加密Key保持不變。

  • 支援通過備份複製低版本執行個體及資料:選擇本地升級時,會在升級前後進行常規備份。如果需要獲得低版本執行個體及資料,可以使用最新的低版本備份組複製執行個體。

升級費用

  • 本地升級零停機不會造成費用的變化,也不會產生訂單。

  • 藍綠部署

    • 升級後產生的新執行個體的計費方式可能會發生變化。

      原執行個體計費方式

      新執行個體計費方式

      訂用帳戶/隨用隨付

      隨用隨付

      Serverless

      Serverless

    • 升級完成後,原執行個體和新執行個體將同時產生費用。在確保業務在新執行個體中穩定運行後,您可以將新執行個體轉成訂用帳戶,將原執行個體釋放或退訂,但需要注意以下情況:

      • 如果您的原執行個體計費方式為訂用帳戶且尚未到期,新執行個體無法繼承原執行個體包月剩餘時間長度,釋放原執行個體可能存在費用損失。

      • 如果您的原執行個體購買時使用了優惠,升級後新執行個體將不會繼承此優惠,請進入執行個體退訂頁面查看具體退款金額後,再評估是否升級。

      • 訂用帳戶退款金額退款時間以實際退訂賬單為準,非即時到賬。

使用限制

  • 執行個體版本:PostgreSQL 16或以下版本

    說明

    支援跨版本升級PostgreSQL 9.4和10的高效能本地碟執行個體僅支援升級至PostgreSQL雲端硬碟版,最高可直接升級至PostgreSQL 14。如果需要升級至PostgreSQL 15或更高版本,請首先升級至中間版本(PostgreSQL 9.4可升級至10、11、12、13或14;PostgreSQL 10可升級至11、12、13或14),然後再進行PostgreSQL 15或更高版本的升級。

  • 執行個體不是唯讀執行個體專屬叢集執行個體

  • 執行個體ID不是以pg-cn開頭。

  • 執行個體未啟用Babelfish,即小版本號碼尾碼不帶babelfish

  • 如果原執行個體中建立了唯讀執行個體,則無法選擇藍綠部署(割接)升級。如果需要進行藍綠部署(割接)升級,請參見具有隻讀執行個體的主執行個體如何升級大版本

  • 儲存類型本地SSD盤的執行個體僅支援採用藍綠部署模式進行大版本升級。在執行個體的基本資料頁面,可以查看執行個體的儲存類型

升級影響

  • 業務影響

    通過藍綠部署(割接)本地升級進行升級時,在割接過程中,原執行個體將會被設定為唯讀,並會造成分鐘級業務閃斷,請在業務低峰期進行升級。如果選擇不割接方式進行升級,則不受影響。

    • 原執行個體被設定唯讀時間的長短與資料庫物件數量相關,執行個體資料庫物件數越多,唯讀時間越長,當資料庫物件數達到百萬層級時,唯讀時間可能達到十分鐘級甚至小時級。您可以使用SELECT count(1) FROM pg_class;命令查看資料庫的對象數。

    • 用戶端感知的閃斷時間長度取決於DNS緩衝重新整理時間。您可以嘗試切換虛擬交換器,通過業務閃斷時間長度來評估用戶端的DNS緩衝重新整理時間。

    • 升級過程的時間長短與執行個體的資料庫物件數量相關,資料庫物件數越多,升級時間越長。大版本升級時您可以在工作中樞查看任務進度,具體請參見任務管理

    • 對於藍綠部署,在割接後,如果不希望原執行個體被設定為唯讀,請在升級後將參數rds_force_trans_ro_non_sup設定為off,詳情請參見設定執行個體參數

  • 參數

    如果原執行個體使用了新版本不支援的參數,在新版本中該參數會被自動刪除,如果低版本的參數取值不在高版本對應參數取值的合法區間,在新版本中該參數會被置為高版本參數模板的預設值。

  • 唯讀執行個體

    • 對於藍綠部署,自建的唯讀節點和複製槽在升級後仍然保留在原執行個體下,不會自動轉移到高版本執行個體,需要在升級後進行重建。

    • 對於本地升級,自建唯讀節點的主備關係以及複製槽在升級後會丟失,請根據實際情況謹慎選擇升級模式。

    • 當待升級的執行個體中建立了唯讀執行個體時,則無法直接進行升級,需要在升級前後進行以下操作:

      具有隻讀執行個體的主執行個體如何升級大版本

      1. 將應用程式中配置的唯讀執行個體串連地址修改為主執行個體串連地址。

        說明

        為保證業務穩定,建議在業務低峰期修改應用串連地址。

      2. 刪除唯讀執行個體。

      3. 升級大版本

      4. 升級完成後,在高版本執行個體上重新建立PostgreSQL唯讀執行個體

      5. 在應用程式中,將升級前修改的執行個體串連地址修改為新的唯讀執行個體串連地址。

  • DTS任務

    如果待升級的執行個體作為Data Transmission Service(DTS)的源執行個體或目標執行個體,則升級後需要重建DTS任務。建立DTS任務詳見DTS產品文檔

  • 資料不同步問題

    當待升級的執行個體中存在Replication Slots的訂閱端,升級可能出現複製槽搶佔導致的資料不同步問題。需要執行如下操作防止出現資料不同步的情況。對於本地升級,建議升級前關閉源執行個體的訂閱。

    如何避免在升級過程中出現複製槽搶佔導致的資料不同步問題

    • 如果您需要將訂閱資料保留在源端(低版本執行個體),那麼在升級的過程中,確保源端不會因負載過大而導致宕機。否則,可能導致複製槽被目標端(高版本執行個體)搶佔,從而出現資料不一致的情況。

      升級完成後,請使用以下SQL語句在目標端的資料庫關閉訂閱。

      \c your_database
      ALTER SUBSCRIPTION your_subscription_name DISABLE;
    • 如果您需要將訂閱資料儲存在目標端,請在升級前關閉源端的訂閱,再進行大版本升級,升級完成後,請開啟目標端的訂閱。SQL樣本如下:

      • 在源端關閉訂閱。

        \c your_database
        ALTER SUBSCRIPTION your_subscription_name DISABLE;
      • 在目標端開啟訂閱。

        \c your_database
        ALTER SUBSCRIPTION your_subscription_name ENABLE;
    說明
  • 對於藍綠部署(割接),升級後新執行個體的虛擬IP(Virtual IP Address)會變更,請自行檢查網路連通性,如防火牆配置。對於本地升級和零停機,不會修改虛擬IP。

    • 虛擬IP變更影響:如果您在應用程式中配置了虛擬IP,則需要修改應用配置以指向新執行個體的虛擬IP。

    • 建議方案:為避免手動修改配置的複雜性,建議在應用程式中直接配置執行個體的串連地址,擷取執行個體串連地址請參見查看或修改串連地址和連接埠

  • 升級大版本將會使用最新的核心小版本,可能遇到外掛程式相容性問題,具體請參見升級核心小版本

  • 升級後暫不支援進行大版本降級操作,如需降級,請購買低版本執行個體後,使用DTS遷移,將執行個體遷移至低版本中。

  • 對於藍綠部署,新執行個體不繼承原執行個體的執行個體名稱標籤CloudMonitor警示規則以及備份資料

  • 升級過程中,系統會暫時將statement_timeout的值修改為0,並在升級完成後恢複為原值。

  • 對於本地升級和零停機,在升級前,系統將對低版本執行個體進行備份;在升級完成後,系統將對高版本執行個體進行備份,以便於後續的複製恢複。

升級步驟

在瞭解了升級方案使用限制及其影響,並選定了合適的升級方式後,請參見升級大版本操作步驟進行升級。

最佳實務

零停機資料庫大版本升級最佳實務