デバッグとその他のツール

このページには、PostgreSQL のデバッグと使用に役立つスクリプトが記載されています。

主キー以外のテーブルの UPDATE オペレーションと DELETE オペレーションを移行する

主キーがないテーブルの場合、標準移行では、Database Migration Service は、変更データ キャプチャ(CDC)フェーズでの初期スナップショットと INSERT ステートメントの移行をサポートします。ただし、標準移行では、主キー以外のテーブルに対して UPDATE ステートメントと DELETE ステートメントは自動的に複製されません(クイックスタート移行では、REPLICA IDENTITY を構成すると、UPDATE オペレーションと DELETE オペレーションの複製がサポートされます)。

標準移行で欠落している UPDATE オペレーションと DELETE オペレーションを検出して手動で同期するには、次のセクションの手順を完了します。

ソースと AlloyDB for PostgreSQL 宛先クラスタ間の欠落データを検出する

  1. ソース データベース内の主キーのないテーブルを特定します。
    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;
  2. 移行ジョブを開始する前に、主キーのないすべてのテーブルについて、変更統計情報を記録します。
    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. これらのベースライン統計情報をテーブルまたはファイルに保存します。
  4. 移行の設定が完了した後、移行ジョブをプロモートする前に、クエリを再度実行します。
  5. 最初の統計情報と最新の統計情報を比較します。移行中に n_tup_upd または n_tup_del が変更された場合、CDC でキャプチャされなかった更新または削除がソースで発生しています。

移行元から移行先の AlloyDB for PostgreSQL クラスタにデータを手動で移行する

主キーのないテーブルで不一致が検出された場合は、次のいずれかのオプションを使用してデータを同期できます。

  • オプション 1: チェックサム クエリまたはデルタ スクリプトを使用して、ソース データベースと移行先の AlloyDB for PostgreSQL クラスタの間でデータを手動で比較し、不一致のレコードに対して適切な SQL 更新を実行します。
  • オプション 2: アプリケーション メンテナンスのカットオーバー中に、主キーのないテーブルに対して pg_dump と pg_restore を実行します。
  • オプション 3: PostgreSQL の COPY コマンドを使用して、テーブルデータをエクスポートおよびインポートします。詳細については、PostgreSQL のドキュメントをご覧ください。