このページには、PostgreSQL のデバッグと使用に役立つスクリプトが記載されています。
主キー以外のテーブルの UPDATE オペレーションと DELETE オペレーションを移行する
主キーがないテーブルの場合、Database Migration Service は、変更データ キャプチャ(CDC)フェーズでの初期スナップショットと INSERT ステートメントの移行をサポートします。
欠落している UPDATE プロセスと DELETE プロセスを更新するには、このドキュメントの後半のセクションをご覧ください。
ソース インスタンスと Cloud SQL 宛先インスタンスの間で欠落しているデータを検出する
- 主キーのないテーブルを特定します。
SELECT tab.table_schema, tab.table_name FROM information_schema.tables tab LEFT JOIN information_schema.table_constraints tco ON tab.table_schema = tco.table_schema AND tab.table_name = tco.table_name AND tco.constraint_type = 'PRIMARY KEY' WHERE tab.table_type = 'BASE TABLE' AND tab.table_schema NOT IN ('pg_catalog', 'information_schema', 'pglogical') AND tco.constraint_name IS NULL ORDER BY table_schema, table_name;
- 移行を開始する前に、主キーのないすべてのテーブルについて、次のクエリを使用して更新または削除があるかどうかを確認します。
ここで:SELECT schemaname, relname, n_tup_ins, n_tup_upd, n_tup_del FROM pg_stat_user_tables WHERE schemaname NOT IN ('pglogical', 'pg_catalog', 'information_schema');
n_tup_ins: 挿入された行数n_tup_upd: 更新された行数(HOT 更新された行を含む)n_tup_del: 削除された行数
- これらの結果を別のテーブルまたはファイルに保存します。
- 移行の設定が完了したら、クエリを再度実行します。
- 結果をステップ 3 の結果と比較します。
移行中にソースの n_tup_upd または n_tup_del の値に違いがある場合は、ソースで更新または削除が行われている可能性があります。
ソースから Cloud SQL 移行先インスタンスにデータを手動で移行する
ソース インスタンスと Cloud SQL 移行先インスタンスの間に不一致があることが検出された場合は、次のいずれかのオプションを使用してデータを移行できます。
オプション 1: ソースと Cloud SQL の宛先の間でデータを手動で比較し、適切な SQL クエリを実行して、ソースとレプリカの間で異なるデータのみを更新します。
オプション 2: 主キーのないテーブルに対して
pg_dumpとpg_restoreを実行します。詳細については、pg_dump を使用してオンプレミスの PostgreSQL サーバーからデータをエクスポートするをご覧ください。オプション 3: PostgreSQL の
COPYコマンドを使用してデータを移行します。詳細については、PostgreSQL のドキュメントをご覧ください。このステップでは、レプリカ VM がソース VM に接続できる必要があります。