選擇將資料庫遷移至 AlloyDB for PostgreSQL 前,請考量這個遷移情境的已知限制。
使用 PostgreSQL 資料庫做為來源時,已知限制包括:
pglogical擴充功能不支援 PostgreSQL 12 以上版本的 生成資料欄複製作業。資料表結構 (DDL) 的變更不會透過標準 DDL 指令複製,而只能使用
pglogical擴充功能執行的指令複製。包括變更enum類型。- 例如,
pglogical提供pglogical.replicate_ddl_command函式,可讓 DDL 在來源資料庫和副本上的一致時間點執行。在來源上執行這項指令的使用者必須已存在於副本。 - 如要複製新建立資料表的資料,您必須使用
pglogical.replication_set_add_table指令,將新資料表新增至現有的複製集。 - 如要進一步瞭解遷移期間的 DDL 複製作業,請參閱「遷移保真度」。
- 例如,
物件限制:
- 邏輯複製不會複製外部資料表。
UNLOGGED和TEMPORARY資料表不會複製,也無法複製。- PostgreSQL 邏輯解碼不支援大型物件資料類型 (
oid參照pg_largeobject)。 - 資料庫遷移服務不會遷移 materialized view 的資料,只會遷移 view 結構定義。如要在目的地資料庫中填入檢視表,請執行
REFRESH MATERIALIZED VIEW view_name;。 - 在持續 CDC 期間,目的地上的
SEQUENCE狀態 (例如last_value) 可能與來源不同。序列值會在最終推送步驟中同步。
如果資料表沒有主鍵,資料庫遷移服務支援在變更資料擷取 (CDC) 階段遷移初始快照和
INSERT陳述式。UPDATE和DELETE陳述式的遷移方式因下列情況而異:- 標準遷移:如果資料表沒有主鍵,系統不會遷移
UPDATE和DELETE陳述式。您必須先為資料欄新增主鍵,才能遷移,或手動遷移UPDATE和DELETE陳述式。 - 快速啟動遷移作業:如果將副本身分設為
INDEX或FULL,則不需主鍵即可複製UPDATE和DELETE作業。設定REPLICA IDENTITY FULL會增加預寫記錄檔 (WAL) 磁碟區和資源負擔。建議您盡可能新增主鍵。詳情請參閱 PostgreSQL 副本身分說明文件和 快速入門遷移指南。
- 標準遷移:如果資料表沒有主鍵,系統不會遷移
只能遷移 AlloyDB for PostgreSQL 支援的 PostgreSQL 擴充功能和擴充功能版本。資料庫遷移服務不會遷移 AlloyDB for PostgreSQL 不支援的擴充功能。如果來源資料庫中的擴充功能版本不支援 AlloyDB for PostgreSQL,測試或啟動遷移工作可能會失敗。為確保遷移作業順利進行,請確認來源擴充功能受到支援,且應用程式未參照不支援的擴充功能。如需支援的擴充功能清單,請參閱 AlloyDB for PostgreSQL 說明文件中的「 支援的擴充功能」。
資料庫遷移服務不會遷移
pg_cron擴充功能 (或擴充功能中設定的任何 cron 工作),但 AlloyDB for PostgreSQL 目的地支援這項功能。如果您在來源資料庫中使用pg_cron,請在遷移完成後,重新安裝擴充功能,並在目的地叢集上設定 cron 工作。資料庫遷移服務不支援從處於復原模式的唯讀副本遷移。
資料庫遷移服務不支援已套用 AWS SCT 擴充套件的 Amazon RDS 來源。
以 C 語言編寫的 user-defined function 無法遷移,但建立 AlloyDB for PostgreSQL 支援的擴充功能時安裝的函式除外。
遷移工作啟動後,新增至來源執行個體的資料庫不會遷移。
使用資料庫遷移服務遷移資料時,您可以選取特定資料庫。系統會遷移所選資料庫中的所有資料表和結構定義,但下列項目除外:
- 資訊結構定義 (
information_schema)。 - 任何開頭為
pg_的結構定義 (例如pg_catalog、pg_toast、pgtemp*)。如需開頭為pg_的 PostgreSQL 目錄完整清單,請參閱 PostgreSQL 說明文件中的 PostgreSQL 系統目錄。 - 使用者登入憑證和角色。
- 資訊結構定義 (
如果加密資料庫需要客戶自行管理的加密金鑰 (CMEK) 才能解密資料,而資料庫遷移服務無法存取金鑰,則無法遷移資料庫。不過,使用
pgcrypto擴充功能加密的資料可以遷移,因為 AlloyDB for PostgreSQL 支援pgcrypto。資料庫遷移服務也支援從已加密的 Amazon Aurora 或 Amazon RDS 資料庫遷移,因為 AWS 會以透明方式處理解密。詳情請參閱「 加密 Amazon Aurora 資源」和「加密 Amazon RDS 資源」。遷移中的資料庫在遷移期間不會受到寫入保護:AlloyDB for PostgreSQL 在遷移期間不會以唯讀模式執行目的地執行個體。雖然您可以連線至目的地叢集,建立及管理資料庫使用者,或套用必要的結構定義變更 (DDL),但請勿對正在遷移的資料庫或資料表執行寫入作業 (例如
INSERT、UPDATE或DELETE)。寫入遷移資料可能會導致 複製衝突或遷移失敗。觸發條件行為取決於觸發條件設定。根據預設,除非使用
ALTER EVENT TRIGGER或ALTER TABLE ... ENABLE ALWAYS TRIGGER設定,否則觸發條件不會在複製期間於副本上觸發。自訂資料表空間會對應至 AlloyDB for PostgreSQL 的預設
pg_default資料表空間。Private Service Connect 介面連線方法僅支援遷移至現有的目的地叢集。如要使用私人 IP 連線,並在標準遷移作業中遷移至新的目的地叢集,請使用虛擬私有雲對等互連。
不支援目的地叢集的 Identity and Access Management 資料庫驗證。資料庫遷移服務會使用資料庫使用者驗證,連線至目的地資料庫。如要進一步瞭解 IAM,請參閱 AlloyDB for PostgreSQL 說明文件中的「管理 IAM 驗證」。
安全性定義者函式
使用 SECURITY DEFINER 定義的函式會以函式擁有者的權限執行,而非執行函式的使用者。
在持續遷移至 AlloyDB for PostgreSQL 的過程中,以 SECURITY DEFINER 定義的常式會由目的地主要執行個體上的內部遷移服務使用者 alloydbexternalsync 擁有。由於 alloydbexternalsync 具備較高的管理員權限,包括 alloydbsuperuser 和 alloydbreplica 角色,因此任何獲授權執行這些功能的使用者,都會以完整的 alloydbsuperuser 權限執行這些功能。這會造成非預期的權限提升風險。
如要降低這項風險,請稽核目的地叢集上的所有 SECURITY DEFINER 函式,並在遷移後立即撤銷公開執行權限:
REVOKE EXECUTE ON FUNCTION SCHEMA_NAME.FUNCTION_NAME(ARGUMENT_TYPES) FROM PUBLIC; GRANT EXECUTE ON FUNCTION SCHEMA_NAME.FUNCTION_NAME(ARGUMENT_TYPES) TO "AUTHORIZED_USER";
校對和語言代碼一致性
AlloyDB for PostgreSQL 預設為 libc 提供的 C.UTF-8 和 en_US.utf8 語言代碼。AlloyDB for PostgreSQL 中的所有其他語言代碼,都使用 Unicode 國際元件 (ICU) 定序。
如果來源資料庫使用的預設定序是以其他 libc 語言代碼為基礎,則該預設值不會自動沿用。為確保使用 ORDER BY 的查詢排序一致,您可能需要在遷移後,使用明確的 ICU 排序規則更新資料表。詳情請參閱 AlloyDB for PostgreSQL 說明文件中的「
匯入資料支援的語言代碼」。
遷移至現有目的地叢集的限制
- 每個目的地叢集只能設定一項進行中的遷移工作。
- 標準遷移作業的目的地叢集降級:如要將標準遷移作業遷移至現有的 AlloyDB for PostgreSQL 叢集,資料庫遷移服務會將獨立叢集降級,並設為來源資料庫的外部副本。
- 在 Google Cloud 控制台建立遷移工作時,您必須輸入目的地叢集 ID (或執行
gcloud database-migration migration-jobs demote-destination),確認降級。 - 快速啟動遷移作業會使用 PostgreSQL
pgnative邏輯複製功能,不需要也不會執行目的地叢集降級作業。
- 在 Google Cloud 控制台建立遷移工作時,您必須輸入目的地叢集 ID (或執行
- 如要進行標準遷移,現有的目的地叢集必須為空白,或僅包含預設系統設定資料。標準遷移作業不支援遷移至含有使用者資料 (例如資料表) 的現有目的地叢集。
如果現有目的地叢集中的額外資料導致問題,請清除目的地叢集中的資料庫,然後重試遷移工作。請參閱「 清除現有目的地叢集中的多餘資料」。
- 支援遷移至含有讀取集區執行個體的叢集。如要進一步瞭解 AlloyDB for PostgreSQL 叢集和執行個體,請參閱「AlloyDB for PostgreSQL 總覽」。
資料 dump 平行處理注意事項
建立遷移工作時,您可以增加平行訂閱數量,加快初始資料轉儲和持續變更資料擷取 (CDC) 複製作業。如果使用較高的資料轉儲平行處理設定,來源資料庫和目的地 AlloyDB for PostgreSQL 叢集的連線和資源使用率也會提高。
- 使用「最大」平行處理前,請確認來源資料庫有足夠的 CPU、記憶體和 I/O 空間。
- 使用調整後的資料轉儲平行處理時,您必須在來源資料庫中為
max_replication_slots、max_wal_senders和max_worker_processes設定較高的值。如需詳細的參數計算方式,請參閱「設定來源資料庫」。 pglogical擴充功能會在初始完整 dump 期間,在資料表層級複製資料。單一非分區資料表會指派給一個訂閱項目,不會分割給多個平行訂閱項目或背景工作執行緒。pglogical擴充功能會將個別葉分區複製為獨立資料表,並在初始完整轉儲期間,將多個葉分區分散至平行訂閱項目。單一大型葉分區無法分割至多個訂閱項目,且會由單一執行緒複製。- 資料庫遷移服務會依大小排序資料表,並將資料表分配至平行訂閱項目。資料庫遷移服務會為「最佳」平行處理建立最多 2 個訂閱項目 (所有資料庫最多 2 個),並為「最大」平行處理建立最多 4 個訂閱項目 (所有資料庫最多 4 個),每個遷移的資料庫至少有 1 個訂閱項目。舉例來說,如果資料庫有一個 1 TB 的資料表和多個小型資料表,資料庫遷移服務會將 1 TB 的資料表隔離在一個訂閱項目中,並將較小的資料表分配到其餘訂閱項目。即使有多個訂閱項目處於啟用狀態,整體初始轉儲速度仍受限於複製單一 1 TB 資料表所需的時間。
- 資料庫遷移服務會將沒有主鍵的資料表,指派給專屬的僅限插入複製集 (每個平行訂閱一個)。多個沒有主鍵的資料表可以分散在平行訂閱項目中,但在初始完整轉儲期間,每個資料表都會複製為一個訂閱項目中的單一資料表串流,不會分散在多個平行執行緒中。
配額
- 無論何時均可存在多達 2,000 個連線設定檔和 1,000 個遷移工作。如要騰出空間,請刪除未使用的遷移工作和連線設定檔。 詳情請參閱「配額與限制」。
主要版本升級期間的 PostgreSQL 擴充功能版本相容性
遷移至較高的 PostgreSQL 主要版本時,資料庫遷移服務會使用 pg_restore 公用程式,安裝目標 PostgreSQL 主要版本的預設擴充功能版本。您無法為 pg_restore 公用程式指定確切的擴充功能版本。
如果來源資料庫使用的擴充功能版本,與目標 PostgreSQL 主要版本上安裝的預設版本結構定義不相容,遷移作業可能會因結構定義不符或內部錯誤而失敗。
為避免遷移失敗,請確認結構定義相容性。遷移前,請將來源資料庫的擴充功能升級至與目標 PostgreSQL 主要版本相容的版本。
後續步驟
如需完整的逐步遷移操作說明,請參閱「 開始使用 AlloyDB for PostgreSQL 遷移作業」。
如要規劃來源和目的地執行個體之間的網路連線,請參閱「 網路注意事項」。