總覽
從來源資料庫將結構定義、資料和中繼資料遷移至目的地資料庫時,您需要確保所有資訊都正確遷移。資料庫遷移服務能以高保真的方式,將資料庫物件 (包括結構定義、資料和中繼資料) 從一個資料庫移至另一個資料庫。
在遷移過程中,資料和限制會分開遷移。 系統會先遷移資料,然後在初始完整傾印和載入後,於執行個體上重新建立主鍵、外鍵和索引等限制。資料庫遷移作業會遷移下列所有資料、結構定義和中繼資料元件:
資料
所有資料庫和結構定義中的所有資料表,但下列結構定義除外:
- 資訊結構定義
information_schema - 開頭為
pg的任何結構定義 (例如pg_catalog)
如要進一步瞭解這些結構定義,請參閱「已知限制」一節。
- 資訊結構定義
結構定義
命名
主鍵
資料類型
序數位置
預設值
是否可以為空值
自動遞增屬性
次要索引
中繼資料
預存程序
函式
觸發條件
瀏覽次數
外鍵限制
持續遷移
在持續遷移期間,只有資料操縱語言 (DML) 變更會自動更新。使用者有責任管理資料定義語言 (DDL) 變更,讓來源和目的地資料庫保持相容。兩種執行方式如下:
-
停止寫入來源,並在來源和目的地中執行 DDL 指令。在目的地執行 DDL 指令之前,請將
cloudsqlexternalsync授予套用 DDL 變更的 Cloud SQL 使用者。如要啟用資料查詢或變更功能,請將cloudsqlexternalsync角色授予相關的 Cloud SQL 使用者。 - 使用
pglogical.replicate_ddl_command,在相同的時間點,在來源和目的地中執行 DDL。執行這項指令的使用者在來源和目的地必須有相同的使用者名稱,且應為超級使用者,或是要遷移構件 (例如資料表、序列、檢視區塊或資料庫) 的擁有者。以下列舉幾個使用
pglogical.replicate_ddl_command的範例。更改項目:
- 將
[SCHEMA]替換為要使用的資料表結構定義名稱 - 將
[TABLE_NAME]替換為資料表名稱 - 執行重新命名作業時,請使用資料表的新名稱
[NEW_NAME_FOR_TABLE]
在含有主鍵的資料庫表格中新增資料欄
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] 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}' );
變更沒有主鍵的資料庫資料表名稱
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'] );
select pglogical.replication_set_add_table('default', '[SCHEMA].[TABLE_NAME]');
建立沒有主鍵的資料庫表
執行下列指令:
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]' );
- 將
不會遷移的項目
如要將使用者新增至 Cloud SQL 目的地執行個體,請前往該執行個體,然後從「使用者」分頁新增使用者,或從 PostgreSQL 用戶端新增使用者。進一步瞭解如何建立及管理 PostgreSQL 使用者。
資料庫遷移服務不會遷移 Cloud SQL 不支援的擴充功能。這些擴充功能不會阻礙遷移作業,但為確保遷移程序順利進行,請確認物件或應用程式未參照任何不支援的擴充功能。建議您先從來源資料庫中移除這些擴充功能和參照,再繼續操作。
大型物件無法複製,因為 PostgreSQL 的邏輯解碼設施不支援解碼大型物件的變更。如果資料表有參照大型物件的資料欄類型
oid,系統會同步處理資料列,並複製新的資料列。不過,嘗試存取目的地資料庫中的大型物件 (使用lo_get讀取、使用lo_export匯出,或檢查指定oid的目錄pg_largeobject) 時,會失敗並顯示大型物件不存在的訊息。如果資料表沒有主鍵,資料庫遷移服務支援在變更資料擷取 (CDC) 階段遷移初始快照和
INSERT陳述式。建議您手動遷移UPDATE和DELETE陳述式。資料庫遷移服務不會遷移具體化檢視區塊的資料,只會遷移檢視區塊結構定義。如要填入檢視區塊,請執行下列指令:
REFRESH MATERIALIZED VIEW view_name。新目的地上的
SEQUENCE狀態 (例如last_value) 可能與來源SEQUENCE狀態不同。目的地 Cloud SQL 執行個體不支援自訂表空間。自訂表空間內的所有資料都會遷移至 Cloud SQL 的預設
pg_default表空間。