已知限制

選擇將資料庫遷移至 Cloud SQL 之前,請先考量這個遷移情境的已知限制。

使用 PostgreSQL 資料庫做為來源時,已知限制包括:

  • pglogical 擴充功能不支援 PostgreSQL 12 以上版本的 生成資料欄複製作業。

  • 資料表結構 (DDL) 的變更不會透過標準 DDL 指令複製,而只能使用 pglogical 擴充功能執行的指令複製。包括變更 enum 類型。

    • 舉例來說,pglogical 提供 pglogical.replicate_ddl_command 函式,可讓 DDL 在來源資料庫和副本上,於一致的時間點執行。
    • 如要複製新建立資料表的資料,您必須使用 pglogical.replication_set_add_table 指令,將新資料表新增至現有的複製集。
    • 如要進一步瞭解遷移期間的 DDL 複製作業,請參閱「遷移保真度」。
  • 如果資料表沒有主鍵,資料庫遷移服務支援在變更資料擷取 (CDC) 階段遷移初始快照和 INSERT 陳述式。UPDATE 和 DELETE 陳述式的遷移方式因下列情況而異:

    • 標準遷移:如果資料表沒有主鍵,系統不會遷移 UPDATE 和 DELETE 陳述式。您必須先為資料欄新增主鍵,才能進行遷移,或手動遷移 UPDATE 和 DELETE 陳述式。
    • 快速啟動遷移作業:如果將副本身分設為 INDEX 或 FULL,則不需要主鍵,即可複製 UPDATE 和 DELETE 作業。設定 REPLICA IDENTITY FULL 會增加預寫記錄 (WAL) 磁碟區和資源負擔。建議您盡可能新增主鍵。詳情請參閱 PostgreSQL 副本身分說明文件和 快速入門遷移指南。
  • 資料庫遷移服務不會遷移 materialized view 的資料,只會遷移 view 結構定義。如要填入目的地資料庫的檢視表,請執行:REFRESH MATERIALIZED VIEW view_name。

  • 在持續進行 CDC 期間,目的地上的 SEQUENCE 狀態 (例如 last_value) 可能與來源不同。序列值會在最終推送步驟中同步。

  • UNLOGGED 和 TEMPORARY 資料表不會複製,也無法複製。

  • PostgreSQL 邏輯解碼不支援大型物件資料類型 (oid 參照 pg_largeobject)。

  • 只有 Cloud SQL 支援 PostgreSQL 的擴充功能可以遷移。資料庫遷移服務不會遷移 Cloud SQL 不支援的擴充功能。這些擴充功能的存在不會阻礙遷移,但為確保遷移順利,請確認應用程式未參照不支援的擴充功能。如需支援的擴充功能清單,請參閱 Cloud SQL 說明文件中的「 PostgreSQL 擴充功能」。

  • pg_cron 擴充功能 (或在擴充功能中設定的任何 cron 工作) 不會由資料庫遷移服務遷移,但 PostgreSQL 適用的 Cloud SQL 目的地支援這項功能。如果您在來源資料庫中使用 pg_cron,請在遷移完成後,重新安裝擴充功能,並在目的地執行個體上設定 Cron 工作。

  • 資料庫遷移服務不支援從復原模式中的唯讀副本遷移。

  • 資料庫遷移服務不支援已套用 AWS SCT 擴充套件的 Amazon RDS 來源。

  • 以 C 語言編寫的 user-defined function 無法遷移,但建立 Cloud SQL 支援的擴充功能時安裝的函式除外。

  • 如果來源資料庫有其他擴充功能,且 Cloud SQL 不支援其版本,測試或啟動遷移工作就會失敗。

  • 遷移工作啟動後,新增至來源執行個體的資料庫不會遷移。

  • 使用資料庫遷移服務遷移資料時,您可以選取特定資料庫。系統會遷移所選資料庫中的所有資料表和結構定義,但下列項目除外:

    • 資訊結構定義 (information_schema)。
    • 任何開頭為 pg_ 的結構定義 (例如 pg_catalog、pg_toast、pgtemp*)。如需開頭為 pg_ 的 PostgreSQL 目錄完整清單,請參閱 PostgreSQL 說明文件中的 PostgreSQL 系統目錄。
    • 使用者登入憑證和角色。
  • 如果加密資料庫需要客戶自行管理的加密金鑰 (CMEK) 才能解密資料,而資料庫遷移服務無法存取金鑰,則無法遷移資料庫。不過,Cloud SQL 支援 pgcrypto,因此可遷移使用 pgcrypto 擴充功能加密的資料。資料庫遷移服務也支援從已加密的 Amazon Aurora 或 Amazon RDS 資料庫遷移,因為 AWS 會以透明方式處理解密。詳情請參閱「 加密 Amazon Aurora 資源」和「加密 Amazon RDS 資源」。

  • 遷移期間目的地資料庫的運作行為:

    • 可寫入的目的地資料庫:PostgreSQL 適用的 Cloud SQL 在遷移期間不會以唯讀模式執行目的地資料庫。目的地執行個體由資料庫遷移服務建立時,不會降級。

    • 避免對遷移資料執行寫入作業:請勿對參與遷移的資料表或資料庫執行寫入作業 (例如 INSERT、UPDATE、DELETE 或 DDL 結構定義變更)。對遷移中的資料執行寫入作業,可能會與傳入的變更資料擷取 (CDC) 串流發生複製衝突。

    • 管理資料庫使用者:您隨時可以使用標準 psql 指令,或透過 Google Cloud 控制台中的 Cloud SQL 建立及管理資料庫使用者。詳情請參閱 Cloud SQL 說明文件中的「管理使用者」。

    • 暫停的功能:持續複製期間,自動備份和時間點復原 (PITR) 功能會暫停。此外,在升級遷移工作之前,您無法從目的地執行個體建立 Cloud SQL 唯讀副本。

  • 觸發條件行為取決於觸發條件設定。根據預設,除非使用 ALTER EVENT TRIGGER 或 ALTER TABLE ... ENABLE ALWAYS TRIGGER 設定,否則觸發條件不會在複製期間於副本上觸發。

  • 使用 SECURITY DEFINER 定義的函式是由 cloudsqlexternalsync 在目的地 Cloud SQL 執行個體上建立,該執行個體具備進階權限。撤銷公開權限並選擇性授予存取權,限制機密 SECURITY DEFINER 函式的執行權限。

  • Cloud SQL 不支援自訂資料表空間。自訂資料表空間內的所有物件,都會遷移至 Cloud SQL 的預設 pg_default 資料表空間。

  • Private Service Connect 介面連線能力方法僅支援遷移至現有的目的地執行個體。如要使用私人 IP 連線,並遷移至新的目的地執行個體,請使用虛擬私有雲對等互連。

遷移至現有目的地執行個體的限制

  • 標準遷移作業的目的地執行個體降級:如要將標準遷移作業遷移至現有的 Cloud SQL 執行個體,資料庫遷移服務會將獨立執行個體降級,並將其設為來源資料庫的外部副本。
    • 降級執行個體不會將 PostgreSQL 引擎設為唯讀模式,但您必須避免對遷移中的資料表執行寫入作業,以免發生複製衝突。
    • 降級執行個體會暫停自動備份和時間點復原 (PITR) 功能,並在升級前禁止新增 Cloud SQL 唯讀副本。
    • 在 Google Cloud 控制台建立遷移工作時,您必須輸入目的地執行個體 ID (或執行 gcloud database-migration migration-jobs demote-destination),確認降級。
    • 快速啟動遷移作業會使用 PostgreSQL pgnative 邏輯複製功能,不需要也不會執行目的地執行個體降級。
  • 現有的目的地執行個體只能包含預設系統資料庫,這些資料庫是在您建立目的地執行個體時自動設定。不支援遷移至含有使用者資料的現有目的地執行個體。

    如果現有目的地執行個體中的額外資料導致問題,請清除目的地執行個體中的資料庫,然後重試遷移工作。請參閱「 清除現有目的地執行個體中的多餘資料」。

  • 每個目的地執行個體只能設定一項遷移工作。
  • 您只能遷移至獨立 Cloud SQL 執行個體。不支援遷移至 外部伺服器副本。
  • 升級執行個體後,您必須啟用時間點復原功能。
  • 如果執行個體有自訂備份設定 (例如 自訂備份位置),則必須在升級後重新還原備份設定。在升級過程中,Cloud SQL 會將備份設定重設為預設值。
  • Terraform 使用者:資料庫遷移服務會修改目的地執行個體的備份和復原設定。這可能會導致目的地執行個體設定與用於佈建的 Terraform 設定不同。如果遇到這個問題,請參閱「 診斷問題」中的指南。

配額

  • 無論何時均可存在多達 2,000 個連線設定檔和 1,000 個遷移工作。如要建立更多空間,請刪除未使用的遷移工作和連線設定檔。

升級主要版本時的 PostgreSQL 擴充功能版本相容性

遷移至較高的 PostgreSQL 主要版本時,資料庫遷移服務會使用 pg_restore 公用程式,安裝目標 PostgreSQL 主要版本的預設擴充功能版本。您無法為 pg_restore 公用程式指定確切的擴充功能版本。

如果來源資料庫使用的擴充功能版本,與目標 PostgreSQL 主要版本上安裝的預設版本結構定義不相容,遷移作業可能會因結構定義不符或內部錯誤而失敗。

為避免遷移失敗,請確認結構定義相容性。遷移前,請將來源資料庫的擴充功能升級至與目標 PostgreSQL 主要版本相容的版本。