遷移作業準確度

將結構定義、資料和中繼資料從來源資料庫遷移至目的地資料庫時,您需要確保所有資訊都準確遷移。資料庫遷移服務提供高保真機制,可將資料庫物件 (包括結構定義、資料和中繼資料) 從一個 PostgreSQL 資料庫遷移至另一個資料庫。

在遷移過程中,資料和限制會分階段遷移。系統會在初始快照載入期間先遷移資料,並在初始載入完成後,在目的地執行個體上重新建立主鍵、外鍵和索引等限制。

資料庫遷移作業會遷移下列資料、結構定義和中繼資料元件:

資料

  • 所選遷移資料庫中的所有資料表和結構定義,但下列系統結構定義除外:

    • 資訊結構定義 (information_schema)
    • 任何開頭為 pg_ 的結構定義 (例如 pg_catalog、pg_toast)

    如要進一步瞭解這些系統結構定義,請參閱「已知限制」。

    在遷移期間,您可以新增或移除遷移工作的資料庫。移除資料庫會停止複製該資料庫,但不會刪除目的地執行個體上已遷移的資料庫。詳情請參閱「編輯遷移工作」。

結構定義

  • 物件命名

  • 主鍵盤區

  • 資料類型

  • 序數資料欄位置

  • 預設值

  • 是否可以為空值

  • 身分和序號屬性

  • 次要索引

中繼資料

  • 預存程序

  • 函式

  • 觸發條件

  • 瀏覽次數

  • 外鍵限制

持續遷移

在持續遷移期間,系統會自動複製 data manipulation language (DML) 變更 (例如對具有主鍵或副本身分的資料表執行 INSERT、UPDATE 和 DELETE 作業)。

如果在遷移過程中,來源資料庫有任何資料定義語言 (DDL) 變更,您必須更新目的地執行個體,確保資料庫保持相容。您可以透過下列方式變更 DDL:

  1. 手動執行 DDL:停止寫入來源資料庫,在來源資料庫執行 DDL 指令,並在目的地資料庫執行相符的 DDL 指令。在目的地執行 DDL 指令前,請將 cloudsqlexternalsync 角色授予套用變更的 Cloud SQL 使用者。

  2. 使用 pglogical 複製 DDL 指令:您可以使用 pglogical.replicate_ddl_command,在複製串流的一致時間點,對來源和目的地資料庫執行 DDL。執行這項指令的使用者必須在來源和目的地執行個體上具備相符的憑證,且必須是超級使用者或修改物件的擁有者。

下列分頁提供使用 pglogical.replicate_ddl_command 執行常見 DDL 作業的 SQL 指令範例:

含有主鍵的資料表

在具有主鍵的資料表中新增資料欄

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)',
  '{default}'
);

變更具有主鍵的資料表名稱

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]',
  '{default}'
);

建立含有主鍵的資料表

在來源資料庫執行下列指令:

SELECT pglogical.replicate_ddl_command(
  command := 'CREATE TABLE [SCHEMA].[TABLE_NAME] (id INTEGER PRIMARY KEY, name VARCHAR);',
  replication_sets := ARRAY['default']
);
SELECT pglogical.replication_set_add_table('default', '[SCHEMA].[TABLE_NAME]');

沒有主鍵的資料表

在沒有主鍵的資料表中新增資料欄

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)',
  '{default_insert_only}'
);

變更沒有主鍵的資料表名稱

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]',
  '{default_insert_only}'
);

建立沒有主鍵的資料表

在來源資料庫執行下列指令:

SELECT pglogical.replicate_ddl_command(
  command := 'CREATE TABLE [SCHEMA].[TABLE_NAME] (id INTEGER PRIMARY KEY, name VARCHAR);',
  replication_sets := ARRAY['default_insert_only']
);
SELECT pglogical.replication_set_add_table('default_insert_only', '[SCHEMA].[TABLE_NAME]');

哪些項目不會遷移

  • 使用者和權限:系統不會遷移使用者登入憑證和角色。如要在目的地執行個體設定使用者,請使用 Google Cloud 控制台中的「Users」(使用者) 分頁,或使用 SQL 用戶端管理使用者。詳情請參閱 Cloud SQL 說明文件中的「 建立及管理使用者」。

  • 不支援的擴充功能:資料庫遷移服務不會遷移 Cloud SQL 不支援的擴充功能。這些擴充功能的存在不會阻礙遷移工作,但參照不支援擴充功能的應用程式可能會發生錯誤。如需支援的擴充功能清單,請參閱 Cloud SQL 說明文件中的「 PostgreSQL 擴充功能」。

  • 大型物件:PostgreSQL 大型物件 (參照 pg_largeobject 的資料類型 oid) 不會透過邏輯解碼複製。

  • 沒有主鍵的資料表:資料庫遷移服務會在 CDC 階段遷移初始快照,並複製 INSERT 陳述式。UPDATE 和 DELETE 陳述式:

    • 標準遷移:標準遷移作業要求資料表必須具備主鍵,才能複製 UPDATE 和 DELETE 陳述式。

    • 快速啟動遷移作業:如果將副本身分設為 INDEX 或 FULL,則不需要主鍵,即可複製 UPDATE 和 DELETE 作業。設定 REPLICA IDENTITY FULL 會增加預寫記錄 (WAL) 磁碟區和資源負擔。建議您盡可能新增主鍵。詳情請參閱 PostgreSQL 副本身分說明文件和 快速入門遷移指南。

  • materialized view:資料庫遷移服務會遷移 materialized view 定義,但不會遷移基礎快取資料。如要在目的地填入 materialized view,請在遷移後執行 REFRESH MATERIALIZED VIEW view_name。

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

  • 自訂資料表空間:Cloud SQL 不支援自訂資料表空間。在自訂資料表空間中定義的物件,會自動重新對應至 Cloud SQL 中的預設 pg_default 資料表空間。

後續步驟