概要
スキーマ、データ、メタデータを移行元データベースから移行先データベースに移行する場合は、これらの情報がすべて正確に移行されるようにする必要があります。Database Migration Service は、データベース オブジェクト(スキーマ、データ、メタデータなど)をデータベース間で忠実に移行する方法を提供します。
データベース移行の一環として、以下のデータ、スキーマ、メタデータ コンポーネントがすべて移行されます。
データ
次のスキーマを除く、すべてのデータベースとスキーマのすべてのテーブル:
- 情報スキーマ
information_schema
pg
で始まるスキーマ(pg_catalog
など)
これらのスキーマの詳細については、既知の制限事項をご覧ください。
- 情報スキーマ
スキーマ
命名
主キー
データ型
序数
デフォルト値
null 可能性
自動増分属性
セカンダリ インデックス
メタデータ
ストアド プロシージャ
関数
トリガー
ビュー
外部キー制約
継続的な移行
継続的な移行中に自動的に更新されるのは、データ操作言語(DML)の変更のみです。移行元と移行先のデータベースの互換性を保つようにデータ定義言語(DDL)の変更を管理するのはユーザーの責任であり、次の 2 つの方法で行うことができます。
-
移行元への書き込みを停止し、移行元と移行先の両方で DDL コマンドを実行します。移行先で DDL コマンドを実行する前に、DDL 変更を適用する AlloyDB ユーザーに
alloydbexternalsync
を付与します。データのクエリや変更を有効にするには、該当する AlloyDB ユーザーにalloydbexternalsync
ロールを付与します。 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
を確認する)、大きなオブジェクトが存在しないというメッセージが表示されて失敗します。主キーのないテーブルの場合、Database Migration Service は、変更データ キャプチャ(CDC)フェーズでの初期スナップショットと
INSERT
ステートメントの移行をサポートします。UPDATE
ステートメントとDELETE
ステートメントは手動で移行する必要があります。Database Migration Service は、マテリアライズド ビューからデータを移行しません。移行するのはビュー スキーマのみです。ビューにデータを入力するには、
REFRESH MATERIALIZED VIEW view_name
コマンドを実行します。新しい宛先の
SEQUENCE
状態(last_value
など)は、ソースのSEQUENCE
状態とは異なる場合があります。カスタマイズされたテーブルスペースは、宛先の Cloud SQL インスタンスではサポートされていません。カスタマイズされたテーブルスペース内のすべてのデータは、Cloud SQL のデフォルトの
pg_default
テーブルスペースに移行されます。