升級 Amazon Aurora PostgreSQL 資料庫叢集 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

升級 Amazon Aurora PostgreSQL 資料庫叢集

Amazon Aurora 使新版 PostgreSQL 資料庫引擎只有在經過廣泛的測試後,才可供用於 AWS 區域 。當您所在區域有新版可供使用時,您可以將 Aurora PostgreSQL 資料庫叢集升級到新版本。

升級到新版本可能是次要升級或主要升級,這視資料庫叢集目前正在執行的 Aurora PostgreSQL 版本而定。例如,將 Aurora PostgreSQL 11.15 資料庫叢集升級至 Aurora PostgreSQL 13.6 是主要版本升級。將 Aurora PostgreSQL 13.3 資料庫叢集升級至 Aurora PostgreSQL 13.7 是次要版本升級。在以下主題中,您可以找到如何執行這兩種升級的相關資訊。

Aurora PostgreSQL 升級程序概觀

主要和次要版本升級之間的差異如下:

次要版本升級和修補程式

次要版本升級和修補程式只包含與現有應用程式回溯相容的變更。次要版本升級和修補程式只有在經過 Aurora PostgreSQL 測試並核准後,才可供您使用。

Aurora 會自動為您套用次要版本升級。建立新 Aurora PostgreSQL 資料庫叢集時,系統已預先選取 Enable minor version upgrade (啟用次要版本升級) 選項。除非您關閉此選項,否則會在您排程的維護時段期間自動套用次要版本升級。如需自動次要版本升級 (AmVU) 選項及如何修改 Aurora 資料庫叢集以使用的詳細資訊,請參閱 Aurora 資料庫叢集的自動次要版本升級

如果未為 Aurora PostgreSQL 資料庫叢集設定自動次要版本升級選項,則 Aurora PostgreSQL 不會自動升級到新的次要版本。相反地,當您 AWS 區域 的 Aurora PostgreSQL 資料庫叢集中發行新的次要版本時,Aurora 會提示您升級。其做法是將建議新增至叢集的維護任務。

修補程式不視為升級,也不會自動套用。Aurora PostgreSQL 會透過對 Aurora PostgreSQL 資料庫叢集的維護任務新增建議,來提示您套用任何修補程式。如需詳細資訊,請參閱 如何執行次要版本升級和套用修補程式

注意

此外,也會新增可解決安全問題或其他重大問題的修補程式作為維護任務。但是,這些修補程式是必要的。當安全修補程式在您的待定維護任務中可供使用時,務必套用到您的 Aurora PostgreSQL 資料庫叢集。

當叢集中每個執行個體升級到新版本時,升級程序可能會出現短暫中斷。不過,在 Aurora PostgreSQL 14.3.3 版、13.7.3 版、12.11.3 版、11.16.3 版、10.21.3 版,以及這些次要版本的其他更高版本和更新的主要版本之後,升級程序會使用零停機時間修補 (ZDP) 功能。此功能可儘量縮短中斷時間,在大多數情況下能夠完全避免中斷。如需詳細資訊,請參閱 次要版本升級和零停機時間修補

注意

下列情況不支援 ZDP:

  • 當 Aurora PostgreSQL 資料庫叢集設定為 Aurora Serverless v1 時。

  • 當 Aurora PostgreSQL 資料庫叢集設定為次要資料庫中的 Aurora 全域資料庫時。 AWS 區域

  • 在 Aurora 全球資料庫中升級讀取器執行個體期間。

  • 在作業系統修補程式和作業系統升級期間

設定為的 Aurora PostgreSQL 資料庫叢集支援 ZDP。Aurora Serverless v2

主要版本升級

不同於次要版本升級和修補程式,Aurora PostgreSQL 沒有自動主要版本升級選項。新主要 PostgreSQL 版本可能包含與現有應用程式回溯不相容的資料庫變更。新功能可能導致現有的應用程式停止正確運作。

為了防止出現任何問題,強烈建議您先按照 測試執行生產資料庫叢集升級到新主要版本的程序 中所列的程序進行,再升級 Aurora PostgreSQL 資料庫叢集中的資料庫執行個體。首先,請按照該程序確定您的應用程式可以在新版上執行。然後,您可以手動將 Aurora PostgreSQL 資料庫叢集升級到新版本。

當叢集中的所有執行個體升級至新版本時,升級程序可能會造成短暫中斷的可能性。初步規劃過程也需要一些時間。建議您一律在叢集維護時段或作業最少的時候執行升等任務。如需詳細資訊,請參閱 如何執行主要版本升級

注意

次要版本升級和主要版本升級可能會造成短暫的中斷。因此,強烈建議您在維護時段或其他低利用率期間執行或安排升級。

Aurora PostgreSQL 資料庫叢集偶爾需要作業系統更新。這些更新可能會包含較新版本的 glibc 程式庫。在此類更新期間,建議您遵循 Aurora PostgreSQL 中支援定序 中所述指示。

取得您的可用版本清單 AWS 區域

您可以透過 AWS 區域 使用describe-db-engine-versions AWS CLI 命令查詢您的 Aurora PostgreSQL 資料庫叢集,取得可作為升級目標的所有引擎版本清單,如下所示。

對於LinuxmacOS、或Unix:

aws rds describe-db-engine-versions \ --engine aurora-postgresql \ --engine-version version-number \ --query 'DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}' \ --output text

在 Windows 中:

aws rds describe-db-engine-versions ^ --engine aurora-postgresql ^ --engine-version version-number ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" ^ --output text

例如,若要識別 Aurora PostgreSQL 12.10 版資料庫叢集的有效升級目標,請執行下列命令: AWS CLI

對於LinuxmacOS、或Unix:

aws rds describe-db-engine-versions \ --engine aurora-postgresql \ --engine-version 12.10 \ --query 'DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}' \ --output text

在 Windows 中:

aws rds describe-db-engine-versions ^ --engine aurora-postgresql ^ --engine-version 12.10 ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" ^ --output text

在此表中,您可以找到適用於各種 Aurora PostgreSQL 資料庫版本的主要與次要版本升級目標。

目前來源版本 升級目標
16.1 16.2
15.6 16.2
15.5 16.2 16.1 15.6
15.4 16.2 16.1 15.6 15.5
15.3 16.2 16.1 15.6 15.5 15.4
15.2 16.2 16.1 15.6 15.5 15.4 15.3
14.11 16.2 15.6
14.10 16.2 16.1 15.6 15.5
14.9 16.2 16.1 15.6 15.5 15.4 14.11 14.10
14.8 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9
14.7 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8
14.6 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7
14.5 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6
14.4 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6 14.5
14.3 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6 14.5 14.4
13.14 16.2 15.6 14.11
13.13 16.2 16.1 15.6 15.5 14.11 14.10
13.12 16.2 16.1 15.6 15.5 15.4 14.11 14.10 14.9
13.11 16.2 16.1 15.6 15.5 15.4 15.3 14.11 14.10 14.9 14.8
13.10 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 13.14 13.13 13.12 13.11
13.9 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6 13.14 13.11 13.10
13.8 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6 14.5 13.14 13.13 13.12 13.11 13.10 13.9
13.7 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6 14.5 14.4 14.3 13.14 13.13 13.12 13.11 13.10 13.9 13.8
12.18 16.2 15.6 14.11 13.14
12.17 16.2 16.1 15.6 15.5 14.11 14.10 13.13
12.16 16.2 16.1 15.6 15.5 15.4 14.11 14.10 14.9 13.14 13.13 13.12
12.15 16.2 16.1 15.6 15.5 15.4 15.3 14.11 14.10 14.9 14.8 13.14 13.13 13.12 13.11
12.14 16.2 16.1 15.6 15.5 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 13.14 13.13 13.12 13.11 13.10 12.15
12.13 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6 13.14 13.13 13.12 13.11 13.10 13.9 12.17 12.16 12.15 12.14
12.12 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6 14.5 13.14 13.13 13.12 13.11 13.10 13.9 12.17 12.16 12.15 13.8 12.15 12.14 12.13
12.11 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.5 14.4 14.3 13.14 13.13 13.12 13.11 13.10 13.9 13.8 13.7 12.15 12.14 12.13 12.12
12.9 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 13.14 13.13 13.12 13.11 13.10 13.9 13.8 13.7 12.17 12.16 12.15 12.14 12.13 12.12 12.11
11.21 16.2 16.1 15.6 15.5 15.4 14.11 14.10 14.9 13.14 13.13 13.12 12.17 12.16
11.9 16.2 16.1 15.6 15.5 15.4 15.3 15.2 14.11 14.10 14.9 14.8 14.7 14.6 13.14 13.13 13.12 13.11 13.10 13.9 12.17 12.16 12.15 12.14 12.13 12.12 12.11 12.09 11.21

對於您正在考慮的任何版本,請務必檢查您叢集資料庫執行個體類別的可用性。例如,Aurora PostgreSQL 13 不支援 db.r4。如果您的 Aurora PostgreSQL 資料庫叢集目前使用 db.r4 執行個體類別,您必須先將其移至 db.r5,再嘗試升級。如需有關資料庫執行個體的詳細資訊,包括哪些執行個體為 Graviton2 型以及哪些是 Intel 型,請參閱 Aurora 資料庫執行個體類別

如何執行主要版本升級

主要版本升級可能包含與舊版資料庫不相容的資料庫變更。新版本中的新功能可能導致現有的應用程式停止正確運作。若要避免發生問題,Amazon Aurora 不會自動套用主要版本升級。相反,建議您按照以下步驟謹慎規劃主要版本升級:

  1. 從表格中為您的版本列出的可用目標清單中,選擇您要的主要版本。您可以使用來取得目前版本中可用的精確版本清單 AWS CLI。 AWS 區域 如需詳細資訊,請參閱 取得您的可用版本清單 AWS 區域

  2. 確認您的應用程式在新版本的試用部署中能如預期運作。如需完整程序的相關資訊,請參閱 測試執行生產資料庫叢集升級到新主要版本的程序

  3. 當確認您的應用程式在試用部署中能如按預期運作後,您便可以升級叢集。如需詳細資訊,請參閱 將 Aurora PostgreSQL 引擎升級為新的主要版本

注意

您可以執行從 Babelfish for Aurora PostgreSQL 13 型版本 (從 13.6 開始) 至 Aurora PostgreSQL 14 型版本 (從 14.6 開始) 的主要版本升級。Babelfish for Aurora PostgreSQL 13.4 和 13.5 不支援主要版本升級。

您可以透過 AWS 區域 使用describe-db-engine-versions AWS CLI 命令查詢您的 Aurora PostgreSQL 資料庫叢集取得可作為主要版本升級目標的引擎版本清單,如下所示。

對於LinuxmacOS、或Unix:

aws rds describe-db-engine-versions \ --engine aurora-postgresql \ --engine-version version-number \ --query 'DBEngineVersions[].ValidUpgradeTarget[?IsMajorVersionUpgrade == `true`].{EngineVersion:EngineVersion}' \ --output text

在 Windows 中:

aws rds describe-db-engine-versions ^ --engine aurora-postgresql ^ --engine-version version-number ^ --query "DBEngineVersions[].ValidUpgradeTarget[?IsMajorVersionUpgrade == `true`].{EngineVersion:EngineVersion}" ^ --output text

在某些情況下,您要升級到的版本不是目前版本的目標。在這種情況下,請使用 versions table 中的資訊執行次要版本升級,直到叢集的版本在其目標列中具有您選擇的目標為止。

測試執行生產資料庫叢集升級到新主要版本的程序

每個新的主要版本都包括旨在提高效能之查詢最佳化工具的增強功能。但是,您的工作負載可能包括導致新版本中計畫效能變差的查詢。這就是為什麼我們建議您在升級生產之前測試和檢閱效能。您可使用查詢計劃管理 (QPM) 擴充功能管理跨版本管理查詢計劃的穩定性,詳情請參閱 主要版本升級之後確保計畫穩定性

將生產 Aurora PostgreSQL 資料庫叢集升級至新的主要版本之前,強烈建議您測試該升級,以確認您所有的應用程式皆可正確運作:

  1. 準備好版本相容的參數群組。

    如果您使用的是自訂資料庫執行個體或資料庫叢集參數群組,您會有兩個選擇:

    1. 指定預設資料庫執行個體、資料庫叢集參數群組,或同時為新資料庫引擎版本指定這兩者。

    2. 為新資料庫引擎版本建立自己的自訂參數群組。

    如果您將新的資料庫執行個體或資料庫叢集參數群組建立關聯,請務必在升級完成後重新啟動資料庫,才能套用參數。如果需要重新啟動資料庫執行個體,才能套用參數群組變更,執行個體的參數群組會顯示 pending-reboot。您可以在主控台中檢視執行個體的參數群組狀態,或使用 CLI 命令 (例如describe-db-instances或) describe-db-clusters

  2. 檢查是否有不支援的使用:

    • 嘗試升級之前,遞交或轉返所有開啟的備妥交易。您可以使用下列查詢,以確認在執行個體上沒有開啟的備妥交易:

      SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
    • 嘗試升級之前,請移除所有 reg* 資料類型的使用。除了 regtyperegclass,您無法升級 reg* 資料類型。pg_upgrade 公用程式 (由 Amazon Aurora 用於進行升級) 無法保留此資料類型。若要進一步了解此公用程式,請參閱 PostgreSQL 文件中的 pg_upgrade

      您可以使用下列查詢,確認在每個資料庫中未使用不支援的 reg* 資料類型:

      SELECT count(*) FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a WHERE c.oid = a.attrelid AND NOT a.attisdropped AND a.atttypid IN ('pg_catalog.regproc'::pg_catalog.regtype, 'pg_catalog.regprocedure'::pg_catalog.regtype, 'pg_catalog.regoper'::pg_catalog.regtype, 'pg_catalog.regoperator'::pg_catalog.regtype, 'pg_catalog.regconfig'::pg_catalog.regtype, 'pg_catalog.regdictionary'::pg_catalog.regtype) AND c.relnamespace = n.oid AND n.nspname NOT IN ('pg_catalog', 'information_schema');
    • 如果您要升級安裝了 pgRouting 擴充功能的 Aurora PostgreSQL 版本 10.18 或更高版本的資料庫叢集,請在升級到版本 12.4 或更高版本之前刪除該擴充功能。

      如果您要升級安裝了 pg_repack 1.4.3 版的 Aurora PostgreSQL 10.x 版本,請在升級到更高版本之前刪除該擴充功能。

  3. 檢查 template1 和 template0 資料庫。

    如需成功升級,template1 和 template0 資料庫必須存在,且應列為範本。若要檢查此情況,請使用下列命令:

    SELECT datname, datistemplate FROM pg_database; datname | datistemplate -----------+--------------- template0 | t rdsadmin | f template1 | t postgres | f

    在命令輸出中,template1 和 template0 資料庫的 datistemplate 值應該是 t

  4. 刪除邏輯複寫槽。

    如果 Aurora PostgreSQL 資料庫叢集正在使用任何邏輯複寫槽,則升級程序將無法繼續。邏輯複寫插槽通常用於短期資料移轉工作,例如使用 AWS DMS 或將資料表從資料庫複製到資料湖、BI 工具或其他目標移轉資料。升級之前,請確保您知道任何現有邏輯複寫槽的用途,並確認可以刪除它們。您可以使用下列查詢來檢查邏輯複寫槽:

    SELECT * FROM pg_replication_slots;

    如果邏輯複寫槽仍在使用,則不應刪除它們,也無法繼續升級。但是,如果不需要邏輯複寫槽,可以使用以下 SQL 加以刪除:

    SELECT pg_drop_replication_slot(slot_name);

    使用 pglogical 延伸模組的邏輯複寫案例也必須具有已從發佈者節點捨棄的插槽,才能在該節點上順利進行主要版本升級。不過,您可以在升級之後,從訂閱者節點重新啟動複寫程序。如需詳細資訊,請參閱 在重大升級之後重新建立邏輯複寫

  5. 執行備份。

    升級程序會在升級期間建立資料庫叢集的資料庫叢集快照。如果您也想在升級程序之前執行手動備份,請參閱 建立資料庫叢集快照 以取得詳細資訊。

  6. 在執行主要版本升級之前,請將某些擴充功能套件升級至最新可用版本。需更新的擴充功能包含下列:

    • pgRouting

    • postgis_raster

    • postgis_tiger_geocoder

    • postgis_topology

    • address_standardizer

    • address_standardizer_data_us

    針對目前已安裝的每個擴充功能執行下列命令。

    ALTER EXTENSION PostgreSQL-extension UPDATE TO 'new-version';

    如需詳細資訊,請參閱 升級 PostgreSQL 延伸。若要深入了解 PostGIS 升級,請參閱 步驟 6:升級 PostGIS 擴充功能

  7. 若要升級至第 11.x 版,請先捨棄不支援的擴充功能套件,然後再執行主要版本升級。需捨棄的擴充功能套件包括:

    • chkpass

    • tsearch2

  8. 根據您的目標版本捨棄 unknown 資料類型。

    PostgreSQL 10 版不支援 unknown 資料類型。如果第 9.6 版資料庫使用 unknown 資料類型,升級至版本 10 會顯示錯誤訊息,如下所示。

    Database instance is in a state that cannot be upgraded: PreUpgrade checks failed: The instance could not be upgraded because the 'unknown' data type is used in user tables. Please remove all usages of the 'unknown' data type and try again."

    若要尋找資料庫中的 unknown 資料類型,以便移除這類資料欄或將其變更為支援的資料類型,請對每個資料庫使用下列 SQL 程式碼。

    SELECT n.nspname, c.relname, a.attname FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n, pg_catalog.pg_attribute a WHERE c.oid = a.attrelid AND NOT a.attisdropped AND a.atttypid = 'pg_catalog.unknown'::pg_catalog.regtype AND c.relkind IN ('r','m','c') AND c.relnamespace = n.oid AND n.nspname !~ '^pg_temp_' AND n.nspname !~ '^pg_toast_temp_' AND n.nspname NOT IN ('pg_catalog', 'information_schema');
  9. 執行停用試轉升級。

    強烈建議您先在生產資料庫的複本上測試主要版本升級,然後再在生產資料庫上嘗試此升級。您可以監控複本測試執行個體上的執行計劃,以查看任何可能的執行計劃迴歸,並評估其效能。若要建立複本測試執行個體,您可以從最近快照還原資料庫或複製您的資料庫。如需更多詳細資訊,請參閱「從快照還原」或「複製 Amazon Aurora 資料庫叢集的一個磁碟區」。

    如需更多詳細資訊,請參閱 將 Aurora PostgreSQL 引擎升級為新的主要版本

  10. 升級您的生產執行個體。

    當試轉主要版本升級成功時,您應該就能放心升級生產資料庫。如需詳細資訊,請參閱 將 Aurora PostgreSQL 引擎升級為新的主要版本

    注意

    升級期間,如果叢集的備份保留期間大於 0,則 Aurora PostgreSQL 會在升級過中建立資料庫叢集快照。在此程序期間,您無法執行叢集 point-in-time 還原。稍後,您可以在升級開始之前和執行個體的自動快照完成之後執行 point-in-time 還原到的時間。但是,您無法執行 point-in-time 還原至先前的次要版本。

    如需有關升級進行中的資訊,您可以使用 Amazon RDS 查看 pg_upgrade 公用程式產生的兩個記錄。這兩個記錄是 pg_upgrade_internal.logpg_upgrade_server.log。Amazon Aurora 會將時間戳記附加至這些日誌的檔案名稱。您可以如同檢視任何其他日誌一般檢視這些日誌。如需更多詳細資訊,請參閱 監控 Amazon Aurora 日誌檔案

  11. 升級 PostgreSQL 擴充功能套件。PostgreSQL 升級程序並不會升級任何 PostgreSQL 擴充功能套件。如需更多詳細資訊,請參閱 升級 PostgreSQL 延伸

完成主要版本升級後,建議您執行下列動作:

  • 執行 ANALYZE 操作以重新整理 pg_statistic 資料表。您應為所有 PostgreSQL 資料庫執行個體上的每個資料庫執行此操作。主要版本升級期間不會傳輸最佳化工具統計數字,因此您需要重新產生所有統計數字以避免效能問題。在沒有任何參數的情況下執行命令,以產生目前資料庫中所有一般資料表的統計數字,如下所示:

    ANALYZE VERBOSE;

    您可選用 VERBOSE 旗標,但使用時會顯示進度。如需詳細資訊,請參閱 PostgreSQL 說明文件中的 ANALYZE

    注意

    升級後在系統上執行 ANALYZE,以避免效能問題。

  • 如果您升級到 PostgreSQL 第 10 版,請在您擁有的任何雜湊索引上執行 REINDEX。雜湊索引在第 10 版中已變更並且必須重建。若要定位無效的雜湊索引,請針對每個包含雜湊索引的資料庫執行下列 SQL。

    SELECT idx.indrelid::regclass AS table_name, idx.indexrelid::regclass AS index_name FROM pg_catalog.pg_index idx JOIN pg_catalog.pg_class cls ON cls.oid = idx.indexrelid JOIN pg_catalog.pg_am am ON am.oid = cls.relam WHERE am.amname = 'hash' AND NOT idx.indisvalid;
  • 建議您使用類似的工作負載,在升級後的資料庫上測試您的應用程式,以驗證一切是否依預期運作。確認升級之後,您可以刪除該測試執行個體。

將 Aurora PostgreSQL 引擎升級為新的主要版本

啟動新主要版本的升級程序時,Aurora PostgreSQL 會先擷取 Aurora 資料庫叢集的快照,再對叢集進行任何變更。此快照僅針對主要版本升級而建立,而不是針對次要版本升級。升級程序完成後,您可以在 RDS 主控台的 Snapshots (快照) 下方所列手動快照之中找到此快照。快照名稱包含作為其字首的 preupgrade、您 Aurora PostgreSQL 資料庫叢集的名稱、來源版本、目標版本,以及日期與時間戳記,如以下範例所示。

preupgrade-docs-lab-apg-global-db-12-8-to-13-6-2022-05-19-00-19

升級完成後,如有需要,您可以使用 Aurora 建立並儲存在手動快照清單中的快照,將資料庫叢集還原至其先前的版本。

提示

一般來說,快照提供許多方法可將 Aurora 資料庫叢集還原到各種時間點。如需了解詳細資訊,請參閱 從資料庫叢集快照還原將資料庫叢集還原至指定時間。但是,Aurora PostgreSQL 不支援使用快照還原至先前的次要版本。

在主要版本升級程序中,Aurora 會配置磁碟區,並複製來源 Aurora PostgreSQL 資料庫叢集。如果升級因任何原因而失敗,Aurora PostgreSQL 會使用複製來復原升級。在配置某個來源磁碟區的複製項超過 15 個時,後續的複製項會變成完整副本,且需要更長的時間。這可能也會導致升級程序花費更長的時間。如果 Aurora PostgreSQL 復原升級,請注意下列事項:

  • 您可能會看到原始磁碟區和升級期間配置的複製磁碟區的計費項目和指標。Aurora PostgreSQL 會在叢集備份保留期間超過升級時間後清理額外的磁碟區。

  • 來自此叢集的下一個跨區域快照複製將是完整副本,而非遞增複本。

為了安全地將構成叢集的資料庫執行個體升級,Aurora PostgreSQL 使用 pg_upgrade 公用程式。寫入器升級完成後,每個讀取器執行個體都會發生短暫的中斷,而它會升級為新的主要版本。若要進一步了解此 PostgreSQL 公用程式,請參閱 PostgreSQL 文件中的 pg_upgrade

您可以使用 AWS Management Console、或 RDS API 將您的 Aurora PostgreSQL 資料庫叢集升級為新版本。 AWS CLI

升級資料庫叢集的引擎版本
  1. 登入 AWS Management Console 並開啟 Amazon RDS 主控台,網址為 https://console.aws.amazon.com/rds/

  2. 在導覽窗格中選擇 Databases (資料庫),然後選擇您要升級的資料庫叢集。

  3. 選擇 Modify (修改)Modify DB cluster (修改資料庫叢集) 頁面隨即出現。

  4. Engine version (引擎版本) 中,選擇新版本。

  5. 選擇 Continue (繼續),並檢查修改的摘要。

  6. 若要立即套用變更,請選擇 Apply immediately (立即套用)。在某些情況下,選擇此選項會導致停機。如需更多詳細資訊,請參閱 修改 Amazon Aurora 資料庫叢集

  7. 在確認頁面上,檢閱您的變更。如果都正確,請選擇 Modify cluster (修改叢集) 以儲存您的變更。

    或者,選擇 Back (上一步) 以編輯變更,或是選擇 Cancel (取消) 以取消變更。

若要升級資料庫叢集的引擎版本,請使用modify-db-cluster AWS CLI 指令。指定下列參數:

  • --db-cluster-identifier – 資料庫叢集的名稱。

  • --engine-version – 會以此資料庫引擎版本編號為目標進行升級。如需有效引擎版本的相關資訊,請使用 AWS CLI describe-db-engine-versions指令。

  • --allow-major-version-upgrade – 此為當 --engine-version 參數是不同於資料庫叢集目前主要版本的主要版本時的必要旗標。

  • --no-apply-immediately – 下個維護時段再套用變更。若要立即套用變更,請使用 --apply-immediately

範例

對於LinuxmacOS、或Unix:

aws rds modify-db-cluster \ --db-cluster-identifier mydbcluster \ --engine-version new_version \ --allow-major-version-upgrade \ --no-apply-immediately

在 Windows 中:

aws rds modify-db-cluster ^ --db-cluster-identifier mydbcluster ^ --engine-version new_version ^ --allow-major-version-upgrade ^ --no-apply-immediately

若要升級資料庫叢集的引擎版本,請使用 ModifyDBCluster 操作。指定下列參數:

  • DBClusterIdentifier – 資料庫叢集的名稱,例如 mydbcluster

  • EngineVersion – 會以此資料庫引擎版本編號為目標進行升級。如需有效引擎版本的相關資訊,請使用描述 B 作EngineVersions業。

  • AllowMajorVersionUpgrade – 此為當 EngineVersion 參數是不同於資料庫叢集目前主要版本的主要版本時的必要旗標。

  • ApplyImmediately – 指出要立即套用變更,或等到下個維護時段再套用。若要立即套用變更,請將值設為 true。若要在下一次維護時段套用變更,請將值設為 false

全域資料庫的主要升級

對於 Aurora 全域資料庫叢集,此升級程序會同時升級構成 Aurora 全域資料庫的所有資料庫叢集。這麼做是為了確保每個資料庫叢集都會執行相同的 Aurora PostgreSQL 版本。這也會確定對系統資料表、資料檔案格式等所做的任何變更都會自動複寫至所有次要叢集。

若要將全域資料庫叢集升級成 Aurora PostgreSQL 的新要主版本,建議您在升級版本上測試您的應用程式,詳情請參閱 測試執行生產資料庫叢集升級到新主要版本的程序。請務必 AWS 區域 在升級之前為 Aurora 全域資料庫中的每個群組準備資料庫參數群組和資料庫參數群組設定,如中step 1. 的詳細資訊測試執行生產資料庫叢集升級到新主要版本的程序

如果 Aurora PostgreSQL 全域資料庫叢集已為其 rds.global_db_rpo 參數設定復原點目標 (RPO),在升級前請務必先重設該參數。如果 RPO 已開啟,則主要版本升級程序不會運作。依預設,此參數為關閉。如需 Aurora PostgreSQL 全域資料庫和 RPO 的詳細資訊,請參閱 管理 Aurora PostgreSQL – 全域資料庫的 RPO

如果您確認您的應用程式在新版本的試用部署中可以如預期執行,則可以啟動升級程序。若要這麼做,請參閱將 Aurora PostgreSQL 引擎升級為新的主要版本。請務必從 RDS 主控台的 Databases (資料庫) 清單中選擇最頂層項目,亦即 Global database (全域資料庫),如下圖所示。

此主控台圖顯示 Aurora 全域資料庫、Aurora Serverless 資料庫叢集,以及另一個 Aurora PostgreSQL 資料庫叢集

與任何修改一樣,當出現提示時,您可以確認讓此程序繼續進行。

此主控台圖顯示確認進行 Aurora PostgreSQL 資料庫叢集升級程序的提示

您不是使用主控台啟動升級程序,而是使用 AWS CLI 或 RDS API。如同主控台,您是對 Aurora 全域資料庫叢集上進行操作,而不是對其任何組成部分,如下所示:

在執行次要版本升級之前

建議您執行下列動作,以減少次要版本升級期間的停機時間:

如何執行次要版本升級和套用修補程式

次要版本升級和修補程式 AWS 區域 僅在經過嚴格的測試後才能使用。在發佈升級和修補程式之前,Aurora PostgreSQL 會進行測試,以確保在次要社群版本發佈後出現的已知安全問題、錯誤和其他問題,不會破壞 Aurora PostgreSQL 機群的整體穩定性。

由於 Aurora PostgreSQL 提供新的次要版本,因此構成 Aurora PostgreSQL 資料庫叢集的執行個體在指定的維護時段期間會自動升級。為此,Aurora PostgreSQL 資料庫叢集必須已開啟 Enable auto minor version upgrade (啟用自動次要版本升級) 選項。所有構成 Aurora PostgreSQL 資料庫叢集的資料庫執行個體必須已開啟自動次要版本升級 (AmVU) 選項,以便在整個叢集中套用次要升級。

提示

確定已對所有構成 Aurora PostgreSQL 資料庫叢集的 PostgreSQL 資料庫執行個體開啟 Enable auto minor version upgrade (啟用自動次要版本升級) 選項。此選項必須開啟,資料庫叢集中的每個執行個體才會運作。如需了解如何設定自動次要版本升級,以及該設定套用於叢集和執行個體層級時如何運作,請參閱  Aurora 資料庫叢集的自動次要版本升級

您可以使用describe-db-instances AWS CLI 命令搭配下列查詢,檢查所有 Aurora PostgreSQL 資料庫叢集的 [啟用 auto 次要版本升級] 選項的值。

aws rds describe-db-instances \ --query '*[].{DBClusterIdentifier:DBClusterIdentifier,DBInstanceIdentifier:DBInstanceIdentifier,AutoMinorVersionUpgrade:AutoMinorVersionUpgrade}'

此查詢會傳回一個清單,其中列出所有的 Aurora 資料庫叢集,以及 AutoMinorVersionUpgrade 設定的狀態值為 truefalse 的執行個體。如圖所示的命令假設您已 AWS CLI 配置為定位默認值 AWS 區域。

如需 AmVU 選項及如何修改 Aurora 資料庫叢集以使用的詳細資訊,請參閱 Aurora 資料庫叢集的自動次要版本升級

您可以透過回應維護任務,或修改叢集以使用新版本,將 Aurora PostgreSQL 資料庫叢集升級為新的次要版本。

您可以識別 Aurora PostgreSQL 資料庫叢集適用的任何升級或修補程式,方法是使用 RDS 主控台,然後開啟 Recommendations (建議) 功能表。在此,您可以找到各種維護問題的清單,例如 Old minor versions (舊次要版本)。視您的生產環境而定,您可以選擇 Schedule (排程) 升級,或選擇 Apply now (立即套用) 立即採取動作,如下所示。

此主控台圖顯示升級到較新次要版本的建議。

若要進一步了解如何維護 Aurora 資料庫叢集,包括如何手動套用修補程式和次要版本升級,請參閱 維持​ 為 Amazon Aurora​ 資料庫叢集

次要版本升級和零停機時間修補

升級 Aurora PostgreSQL 資料庫叢集可能會造成中斷。在升級過程中,資料庫在升級期間會關閉。如果您在資料庫忙碌時開始升級,則會遺失資料庫叢集正在處理的所有連線和交易。如果您要等到資料庫閒置才執行升級,就可能必須等待很長時間。

零停機時間修補 (ZDP) 功能改進了升級程序。透過 ZDP,可讓套用次要版本升級和修補程式對 Aurora PostgreSQL 資料庫叢集造成的影響最小。將修補程式或更新的次要版本升級套用至 Aurora PostgreSQL 版本以及這些次要版本的其他更新版本和更新的主要版本時,會使用 ZDP。也就是說,從上述任何一個版本之後的版本升級至新的次要版本都會使用 ZDP。

下列資料表顯示可使用 ZDP 的 Aurora PostgreSQL 版本和資料庫執行個體類別:

版本 db.r* 執行個體類別 db.t* 執行個體類別 db.x* 執行個體類別 db.serverless 執行個體類別
10.21.0 版和更新的 10.21 版 N/A
11.16.0 版和更新的 11.16 版 N/A
11.17 和更新版本 N/A
12.11.0 版和更新的 12.11 版 N/A
12.12 和更新版本 N/A
13.7.0 版和更新的 13.7 版 N/A
13.8 和更新版本
14.3.1 和更新的 14.3 版 N/A
14.4.0 版和更新的 14.4 版 N/A
14.5 和更新版本
15.3 和更新版本

ZDP 的工作是在整個 Aurora PostgreSQL 升級程序中,保留目前您的 Aurora PostgreSQL 資料庫叢集與用戶端的連線。不過,在下列情況下,將會中斷連線,讓 ZDP 完成:

  • 長時間執行的查詢或交易正在進行中。

  • 資料定義語言 (DDL) 陳述式執行中。

  • 暫存資料表或資料表鎖定正在使用中。

  • 所有工作階段都在通知通道上接聽。

  • 處於 ‘WITH HOLD’ 狀態的游標正在使用中。

  • TLSv1.3 或 TLSv1.1 連線正在使用中。

在使用 ZDP 進行升級程序期間,資料庫引擎會尋找安靜點以暫停所有新事務。此動作可在修補程式和升級期間保護資料庫。為了確保應用程式在事務暫停期間順利執行,建議您將重試邏輯整合到程式碼中。此方法可確保系統能夠管理任何短暫的停機時間而不致失效,且可在升級後重試新的事務。

當 ZDP 成功完成時,會保持應用程式工作階段 (但中斷連線的工作階段除外),而且資料庫引擎也會重新啟動,但同時間升級仍在進行中。雖然資料庫引擎重新啟動可能會導致輸送量暫時下降,但一般只會持續數秒,最多持續一分鐘左右。

在某些情況下,零停機時間修補 (ZDP) 可能無法成功。例如,在 Aurora PostgreSQL 資料庫叢集或其執行個體上狀態為 pending 的參數變更會干擾 ZDP。

您可以在主控台的 Events (事件) 頁面中找到 ZDP 操作的指標與事件。事件包括 ZDP 升級的開始和升級的完成。在這種情況下,您可以找到此過程所花的時間,以及重新啟動期間發生的保留和捨棄連線數量。您可以在資料庫錯誤日誌中找到詳細資訊。

將 Aurora PostgreSQL 引擎升級為新的次要版本

您可以使用主控台或 RDS API 將 Aurora PostgreSQL 資料庫叢集升級為新的 AWS CLI次要版本。在執行升級之前,我們建議您遵循與主要版本升級建議的相同最佳作法。與新的主要版本一樣,新的次要版本也有優化器改進 (如修復),這可能會導致查詢計劃迴歸。為了確保計劃穩定,我們建議您使用查詢管理計畫 (QPM) 擴充功能,如 主要版本升級之後確保計畫穩定性 中詳細說明。

升級 Aurora PostgreSQL 資料庫叢集的引擎版本
  1. 登入 AWS Management Console 並開啟 Amazon RDS 主控台,網址為 https://console.aws.amazon.com/rds/

  2. 在導覽窗格中選擇 Databases (資料庫),然後選擇您要升級的資料庫叢集。

  3. 選擇 Modify (修改)Modify DB cluster (修改資料庫叢集) 頁面隨即出現。

  4. Engine version (引擎版本) 中,選擇新版本。

  5. 選擇 Continue (繼續),並檢查修改的摘要。

  6. 若要立即套用變更,請選擇 Apply immediately (立即套用)。在某些情況下,選擇此選項會導致停機。如需更多詳細資訊,請參閱 修改 Amazon Aurora 資料庫叢集

  7. 在確認頁面上,檢閱您的變更。如果都正確,請選擇 Modify cluster (修改叢集) 以儲存您的變更。

    或者,選擇 Back (上一步) 以編輯變更,或是選擇 Cancel (取消) 以取消變更。

若要升級資料庫叢集的引擎版本,請使用具有下列參數的modify-db-cluster AWS CLI 命令:

  • --db-cluster-identifier –Aurora PostgreSQL 資料庫叢集的名稱。

  • --engine-version – 會以此資料庫引擎版本編號為目標進行升級。如需有效引擎版本的相關資訊,請使用 AWS CLI describe-db-engine-versions指令。

  • --no-apply-immediately – 下個維護時段再套用變更。若要立即套用變更,請改用 --apply-immediately

對於LinuxmacOS、或Unix:

aws rds modify-db-cluster \ --db-cluster-identifier mydbcluster \ --engine-version new_version \ --no-apply-immediately

在 Windows 中:

aws rds modify-db-cluster ^ --db-cluster-identifier mydbcluster ^ --engine-version new_version ^ --no-apply-immediately

若要升級資料庫叢集的引擎版本,請使用 ModifyDBCluster 操作。指定下列參數:

  • DBClusterIdentifier – 資料庫叢集的名稱,例如 mydbcluster

  • EngineVersion – 會以此資料庫引擎版本編號為目標進行升級。如需有效引擎版本的相關資訊,請使用描述 B 作EngineVersions業。

  • ApplyImmediately – 指出要立即套用變更,或等到下個維護時段再套用。若要立即套用變更,請將值設為 true。若要在下一次維護時段套用變更,請將值設為 false

升級 PostgreSQL 延伸

將 Aurora PostgreSQL 資料庫叢集升級至新的主要或次要版本不會同時升級 PostgreSQL 延伸模組。對於大多數的延伸模組,您可以在主要或次要版本升級完成後升級延伸模組。但在某些情況下,在升級 Aurora PostgreSQL 資料庫引擎之前要先升級擴充功能。如需詳細資訊,請參閱 測試執行生產資料庫叢集升級到新主要版本的程序 中的 list of extensions to update

安裝 PostgreSQL 擴充功能需要 rds_superuser 權限。通常,rds_superuser 會將特定擴充功能的許可委派給相關使用者 (角色),以促進管理給定的延伸模組。這意味著升級 Aurora PostgreSQL 資料庫叢集中所有擴充功能的這項任務會涉及許多不同的使用者 (角色)。如果要使用指令碼自動執行升級程序,請特別記得這一點。如需 PostgreSQL 權限和角色的詳細資訊,請參閱 Amazon Aurora PostgreSQL 的安全性

注意

如需如何更新 PostGIS 擴充功能的相關資訊,請參閱 使用 PostGIS 擴充功能管理空間資料 (步驟 6:升級 PostGIS 擴充功能)。

若要更新 pg_repack 擴充功能,請捨棄該擴充功能,然後在升級的資料庫執行個體中建立新版本。如需詳細資訊,請參閱 pg_repack 說明文件中的 pg_repack 安裝

若要在引擎升級後更新擴充功能,請使用 ALTER EXTENSION UPDATE 命令。

ALTER EXTENSION extension_name UPDATE TO 'new_version';

若要列出目前已安裝的擴充功能,請在下列命令中使用 PostgreSQL pg_extension 目錄。

SELECT * FROM pg_extension;

若要檢視您的安裝可用的特定擴充功能版本的清單,請在下列命令中使用 PostgreSQL pg_available_extension_versions 檢視。

SELECT * FROM pg_available_extension_versions;

替代藍/綠升級技術

在某些情況下,您的首要目標是立即從舊叢集切換至升級的叢集。在這種情況下,您可以使用執行舊叢集和新叢集 side-by-side的多步驟處理序。在這裡,您會將舊叢集的資料複寫到新叢集,直至您準備好接管新叢集。如需詳細資訊,請參閱 使用 Amazon RDS 藍/綠部署進行資料庫更新