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

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

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

主キーがないテーブルの場合、Database Migration Service は、変更データ キャプチャ(CDC)フェーズでの初期スナップショットと INSERT ステートメントの移行をサポートします。

欠落している UPDATE プロセスと DELETE プロセスを更新するには、このドキュメントの後半のセクションをご覧ください。

ソース インスタンスと Cloud SQL 宛先インスタンスの間で欠落しているデータを検出する

  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. 結果をステップ 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 に接続できる必要があります。