總覽
將結構定義、資料和中繼資料從來源資料庫遷移至目的地資料庫時,您需要確保所有這些資訊都正確遷移。資料庫移轉服務提供高傳真方式,可將資料庫物件 (包括結構定義、資料和中繼資料) 從一個資料庫遷移至另一個資料庫。
下列所有資料、結構定義和中繼資料元件都會在資料庫遷移作業中遷移:
資料
所有資料庫和結構定義中的所有資料表,但下列結構定義除外:
- 資訊結構定義
information_schema
- 開頭為
pg
的任何結構定義 (例如pg_catalog
)
如要進一步瞭解這些結構定義,請參閱「已知限制」。
- 資訊結構定義
結構定義
命名
主鍵
資料類型
序數位置
預設值
是否可以為空值
自動遞增屬性
次要索引
中繼資料
預存程序
函式
觸發條件
瀏覽次數
外鍵限制
持續遷移
在持續遷移期間,系統只會自動更新資料操縱語言 (DML) 變更。管理資料定義語言 (DDL) 變更,讓來源和目的地資料庫保持相容,是使用者的責任,可透過兩種方式達成:
-
停止寫入來源,並在來源和目的地中執行 DDL 指令。在目的地執行 DDL 指令之前,請將
alloydbexternalsync
授予套用 DDL 變更的 AlloyDB 使用者。如要啟用資料查詢或變更功能,請將alloydbexternalsync
角色授予相關的 AlloyDB 使用者。 - 使用
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]' );
- 將
不會遷移的項目
由於 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
資料表空間。