このページには、PostgreSQL のデバッグと使用に役立つスクリプトが記載されています。
主キー以外のテーブルの UPDATE オペレーションと DELETE オペレーションを移行する
主キーがないテーブルの場合、標準移行では、Database Migration Service は、変更データ キャプチャ(CDC)フェーズでの初期スナップショットと INSERT ステートメントの移行をサポートします。ただし、標準移行では、主キー以外のテーブルに対して UPDATE ステートメントと DELETE ステートメントは自動的に複製されません(クイックスタート移行では、REPLICA IDENTITY を構成すると、UPDATE オペレーションと DELETE オペレーションの複製がサポートされます)。
標準移行で欠落している UPDATE オペレーションと DELETE オペレーションを検出して手動で同期するには、次のセクションの手順を完了します。
ソースと AlloyDB for PostgreSQL 宛先クラスタ間の欠落データを検出する
- ソース データベース内の主キーのないテーブルを特定します。
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: 削除された行数
- これらのベースライン統計情報をテーブルまたはファイルに保存します。
- 移行の設定が完了した後、移行ジョブをプロモートする前に、クエリを再度実行します。
- 最初の統計情報と最新の統計情報を比較します。移行中に
n_tup_updまたはn_tup_delが変更された場合、CDC でキャプチャされなかった更新または削除がソースで発生しています。
移行元から移行先の AlloyDB for PostgreSQL クラスタにデータを手動で移行する
主キーのないテーブルで不一致が検出された場合は、次のいずれかのオプションを使用してデータを同期できます。
- オプション 1: チェックサム クエリまたはデルタ スクリプトを使用して、ソース データベースと移行先の AlloyDB for PostgreSQL クラスタの間でデータを手動で比較し、不一致のレコードに対して適切な SQL 更新を実行します。
- オプション 2: アプリケーション メンテナンスのカットオーバー中に、主キーのないテーブルに対して
pg_dumpとpg_restoreを実行します。 - オプション 3: PostgreSQL の
COPYコマンドを使用して、テーブルデータをエクスポートおよびインポートします。詳細については、PostgreSQL のドキュメントをご覧ください。