本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
執行主要版本升級
主要版本升級可能包含與舊版資料庫不相容的資料庫變更。新版本中的新功能可能導致現有的應用程式停止正確運作。若要避免發生問題,Amazon Aurora 不會自動套用主要版本升級。相反,建議您按照以下步驟謹慎規劃主要版本升級:
-
從表格中為您的版本列出的可用目標清單中,選擇您要的主要版本。您可以使用 取得 AWS 區域 目前版本 中可用版本的精確清單 AWS CLI。如需詳細資訊,請參閱取得 中可用版本的清單 AWS 區域。
-
確認您的應用程式在新版本的試用部署中能如預期運作。如需完整程序的相關資訊,請參閱 測試執行生產資料庫叢集升級到新主要版本的程序。
-
當確認您的應用程式在試用部署中能如按預期運作後,您便可以升級叢集。如需詳細資訊,請參閱將 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 資料庫叢集主要版本升級目標的引擎版本清單,如下所示。
對於 Linux、 macOS或 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 資料庫叢集升級至新的主要版本之前,強烈建議您測試該升級,以確認您所有的應用程式皆可正確運作:
-
準備好版本相容的參數群組。
如果您使用的是自訂資料庫執行個體或資料庫叢集參數群組,您會有兩個選擇:
-
指定預設資料庫執行個體、資料庫叢集參數群組,或同時為新資料庫引擎版本指定這兩者。
-
為新資料庫引擎版本建立自己的自訂參數群組。
如果您將新的資料庫執行個體或資料庫叢集參數群組建立關聯,請務必在升級完成後重新啟動資料庫,才能套用參數。如果需要重新啟動資料庫執行個體,才能套用參數群組變更,執行個體的參數群組會顯示
pending-reboot
。您可以在主控台中或使用 CLI 命令 (例如 describe-db-instances 或 describe-db-clusters) 查看執行個體的參數群組狀態。 -
-
檢查無效資料庫並捨棄任何存在的資料庫。
pg_database
目錄中的datconnlimit
欄包含一個值-2
,用於將DROP DATABASE
操作期間中斷的任何資料庫標記為無效。使用下列查詢來檢查是否存在無效的資料庫。SELECT datname FROM pg_database WHERE datconnlimit = - 2;
如果查詢傳回資料庫名稱,則這些資料庫無效。使用
DROP DATABASE invalid_db_name
陳述式捨棄無效的資料庫。您可以使用下列動態陳述式來捨棄所有無效的資料庫。SELECT 'DROP DATABASE ' || quote_ident(datname) || ';' FROM pg_database WHERE datconnlimit = -2 \gexec
-
檢查是否有不支援的使用:
-
嘗試升級之前,遞交或轉返所有開啟的備妥交易。您可以使用下列查詢,以確認在執行個體上沒有開啟的備妥交易:
SELECT count(*) FROM pg_catalog.pg_prepared_xacts;
-
嘗試升級之前,請移除所有 reg* 資料類型的使用。除了
regtype
和regclass
,您無法升級 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 版本,請在升級到更高版本之前刪除該擴充功能。
-
-
檢查 template1 和 template0 資料庫。
如需成功升級,template1 和 template0 資料庫必須存在,且應列為範本。若要檢查此情況,請使用下列命令:
SELECT datname, datistemplate FROM pg_database;
datname | datistemplate -----------+--------------- template0 | t rdsadmin | f template1 | t postgres | f
在命令輸出中,template1 和 template0 資料庫的
datistemplate
值應該是t
。 -
刪除邏輯複寫槽。
如果 Aurora PostgreSQL 資料庫叢集正在使用任何邏輯複寫槽,則升級程序將無法繼續。邏輯複寫槽通常用於短期資料遷移任務,例如使用 AWS DMS 或 將資料表從資料庫複寫到資料湖、BI 工具或其他目標。升級之前,請確保您知道任何現有邏輯複寫槽的用途,並確認可以刪除它們。您可以使用下列查詢來檢查邏輯複寫槽:
SELECT * FROM pg_replication_slots;
如果邏輯複寫槽仍在使用,則不應刪除它們,也無法繼續升級。但是,如果不需要邏輯複寫槽,可以使用以下 SQL 加以刪除:
SELECT pg_drop_replication_slot(
slot_name
);使用
pglogical
延伸模組的邏輯複寫案例也必須具有已從發佈者節點捨棄的插槽,才能在該節點上順利進行主要版本升級。不過,您可以在升級之後,從訂閱者節點重新啟動複寫程序。如需詳細資訊,請參閱在重大升級之後重新建立邏輯複寫。 -
執行備份。
升級程序會在升級期間建立資料庫叢集的資料庫叢集快照。如果您也想在升級程序之前執行手動備份,請參閱 建立資料庫叢集快照 以取得詳細資訊。
-
在執行主要版本升級之前,請將某些擴充功能套件升級至最新可用版本。需更新的擴充功能包含下列:
-
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:升級貼文GIS擴充功能。
-
-
若要升級至第 11.x 版,請先捨棄不支援的擴充功能套件,然後再執行主要版本升級。需捨棄的擴充功能套件包括:
-
chkpass
-
tsearch2
-
-
根據您的目標版本捨棄
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');
-
執行停用試轉升級。
強烈建議您先在生產資料庫的複本上測試主要版本升級,然後再在生產資料庫上嘗試此升級。您可以監控複本測試執行個體上的執行計劃,以查看任何可能的執行計劃迴歸,並評估其效能。若要建立複本測試執行個體,您可以從最近快照還原資料庫或複製您的資料庫。如需更多詳細資訊,請參閱「從快照還原」或「複製 Amazon Aurora 資料庫叢集的一個磁碟區」。
如需更多詳細資訊,請參閱 將 Aurora PostgreSQL 引擎升級為新的主要版本。
-
升級您的生產執行個體。
當試轉主要版本升級成功時,您應該就能放心升級生產資料庫。如需詳細資訊,請參閱將 Aurora PostgreSQL 引擎升級為新的主要版本。
注意
升級期間,如果叢集的備份保留期間大於 0,則 Aurora PostgreSQL 會在升級過中建立資料庫叢集快照。在此升級期間,您無法進行叢集的時間點還原。之後,您可以執行時間點還原,以便還原至升級開始之前的時間,以及執行個體的自動快照已完成之後的時間。但是,您無法執行時間點還原至先前的次要版本。
如需有關升級進行中的資訊,您可以使用 Amazon RDS 查看 pg_upgrade 公用程式產生的兩個記錄。這兩個記錄是
pg_upgrade_internal.log
和pg_upgrade_server.log
。Amazon Aurora 會將時間戳記附加至這些日誌的檔案名稱。您可以如同檢視任何其他日誌一般檢視這些日誌。如需更多詳細資訊,請參閱 監控 Amazon Aurora 日誌檔案。 -
升級 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 AWS CLI、 或 RDS API,將 Aurora PostgreSQL 資料庫叢集升級至新版本。
升級資料庫叢集的引擎版本
-
登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/rds/
開啟 Amazon RDS 主控台。 -
在導覽窗格中選擇 Databases (資料庫),然後選擇您要升級的資料庫叢集。
-
選擇 Modify (修改)。Modify DB cluster (修改資料庫叢集) 頁面隨即出現。
-
在 Engine version (引擎版本) 中,選擇新版本。
-
選擇 Continue (繼續),並檢查修改的摘要。
-
若要立即套用變更,請選擇 Apply immediately (立即套用)。在某些情況下,選擇此選項會導致停機。如需更多詳細資訊,請參閱 修改 Amazon Aurora 資料庫叢集。
-
在確認頁面上,檢閱您的變更。如果都正確,請選擇 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
。
範例
對於 Linux、 macOS或 Unix:
aws rds modify-db-cluster \ --db-cluster-identifier
mydbcluster
\ --engine-versionnew_version
\ --allow-major-version-upgrade \ --no-apply-immediately
在 Windows 中:
aws rds modify-db-cluster ^ --db-cluster-identifier
mydbcluster
^ --engine-versionnew_version
^ --allow-major-version-upgrade ^ --no-apply-immediately
若要升級資料庫叢集的引擎版本,請使用 ModifyDBCluster 操作。指定下列參數:
-
DBClusterIdentifier
– 資料庫叢集的名稱,例如
。mydbcluster
-
EngineVersion
– 會以此資料庫引擎版本編號為目標進行升級。如需有效引擎版本的資訊,請使用 DescribeDBEngineVersions 操作。 -
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 (全域資料庫),如下圖所示。

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

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