SQL ファイルをエクスポートする

このページでは、AlloyDB for PostgreSQL クラスタから SQL ダンプファイルにデータをエクスポートする方法について説明します。

サポートされているデータベース サーバーから新しい AlloyDB インスタンスにデータベース全体を移行する方法については、Database Migration Service を使用してデータベースを AlloyDB に移行するをご覧ください。エクスポートされたファイルから新しいインスタンスを作成するためにエクスポートする場合は、保存されているバックアップからクラスタを復元することを検討してください。

AlloyDB for PostgreSQL クラスタからのデータのエクスポートをキャンセルできます。詳細については、データのエクスポートをキャンセルするをご覧ください。

始める前に

  • エクスポート オペレーションを開始する前に、エクスポート オペレーションではデータベース リソースが使用されますが、インスタンスがプロビジョニングされていない限り、エクスポートによって標準のデータベース オペレーションが妨げられることはありません。
  • ターゲット バケットがソースクラスタとは異なるリージョンにある場合、リージョン間のデータ転送料金が適用されます。詳細については、AlloyDB for PostgreSQL の料金をご覧ください。
  • オブジェクト名が .gz 拡張子で終わっている場合、圧縮が有効になります。オブジェクトは .gz 形式で Cloud Storage にエクスポートされます。
  • 複数のエクスポート オペレーションを並行して実行できます。

AlloyDB からのエクスポートに必要なロールと権限

AlloyDB から Cloud Storage にデータをエクスポートするには、エクスポートを開始するユーザーに次のいずれかの Identity and Access Management(IAM)ロールが必要です。

また、AlloyDB クラスタのサービス アカウントには、次のいずれかのロールが必要です。

  • storage.objectAdmin IAM ロール
  • storage.objects.create 権限を含むカスタムロール

IAM ロールについては、Identity and Access Management をご覧ください。

AlloyDB データを SQL ダンプファイルにエクスポートする

gcloud CLI または API から AlloyDB を使用してエクスポートを実行する場合、pg_dump ユーティリティを使用します。このとき、生成されるエクスポート ファイルを AlloyDB に確実に再インポートできるようにするオプションを指定します。

AlloyDB クラスタ上のデータベースから Cloud Storage バケットの SQL ダンプファイルにデータをエクスポートする手順は次のとおりです。

gcloud

  1. Cloud Storage バケットを作成する
  2. 指定された形式を使用して、エクスポート元のプロジェクトのサービス アカウントを特定します。サービス アカウントの形式は次のとおりです。

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    エクスポート オペレーション用の Cloud Storage バケットに対する権限をサービス アカウントに付与します。

  3. gcloud storage buckets add-iam-policy-binding を使用して、サービス アカウントに storage.objectAdmin IAM ロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。

  4. データベースを Cloud Storage バケットにエクスポートします。次のリストは、SQL ダンプ形式でデータをエクスポートするためのオプションを示しています。

    • --async(省略可): 処理中のオペレーションの完了を待たずに、直ちにコマンドを終了します。
    • --tables(省略可): エクスポート元のテーブル。
    • --schema-only(省略可): 設定されている場合、スキーマのみをエクスポートします。
    • --clean-target-objects(省略可): 設定すると、ダンプされたすべてのデータベース オブジェクトを DROP にコマンド出力してから、それらの作成コマンドを出力します。
    • --if-exist-target-objects(省略可): 設定されている場合は、DROP ... IF EXISTS コマンドを使用してオブジェクトの存在を確認してから、--clean-target-objects モードでドロップします。

    これらの機能を使用するには、これらのオプションを gcloud コマンドに含めます。データではなくオブジェクト定義(スキーマ)のみをエクスポートする場合は、–-schema-only フラグを使用します。エクスポートするテーブルを指定するには、--tables=TABLE_NAMES フラグを使用します。複数のテーブルを指定するには、テーブル名またはワイルドカード パターンの値をカンマで区切って指定します。

    それ以外の場合は、次のコマンドからこれらのパラメータを削除します。

    gcloud alloydb clusters export CLUSTER_NAME
      --region=REGION
      --database=DATABASE_NAME
      --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME"
      --tables=TABLE_NAMES
      --schema-only
      --clean-target-objects
      --if-exist-target-objects
      --sql

    alloydb clusters export コマンドには、トリガーやストアド プロシージャは含まれませんが、ビューは含まれます。トリガーまたはストアド プロシージャをエクスポートするには、pg_dump ユーティリティを使用します。

    alloydb clusters export コマンドの使用方法については、alloydb clusters export コマンドのリファレンス ページをご覧ください。

  5. 以前に設定した IAM ロールを保持する必要がない場合は、この時点でロールを取り消ししてください。

REST v1

  1. エクスポート先のバケットを作成します。

    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
  2. サービス アカウントの形式を使用して、エクスポート元のプロジェクトのサービス アカウントを特定します。

    サービス アカウントの形式は次のとおりです。

     service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    エクスポート オペレーション用の Cloud Storage バケットに対する権限をサービス アカウントに付与します。

  3. gcloud storage buckets add-iam-policy-binding を使用して、サービス アカウントに storage.objectAdmin IAM ロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。

  4. データベースをエクスポートします。

    次の HTTP メソッドと URL を使用します。

    POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export

    リクエスト データを使用する前に、次のように置き換えます。

    • PROJECT_ID: プロジェクト ID。
    • REGION: AlloyDB クラスタがデプロイされているリージョン。
    • CLUSTER_ID: クラスタ ID。
    • BUCKET_NAME: Cloud Storage バケット名。
    • PATH_TO_SQL_FILE: SQL ダンプファイルのパス。
    • DATABASE_NAME: AlloyDB インスタンス内のデータベースの名前。
    • TABLES: エクスポート元のテーブル。
    • SCHEMA_ONLY: true の場合、スキーマのみをエクスポートします。
    • CLEAN_TARGET_OBJECTS: true の場合、ダンプされたすべてのデータベース オブジェクトを DROP にコマンド出力してから、作成コマンドを出力します。
    • IF_EXIST_TARGET_OBJECTS: true の場合は、DROP ... IF EXISTS コマンドを使用してオブジェクトの存在を確認してから、clean_target_objects モードでドロップします。

    これらの機能を利用するには、これらのパラメータの値を true に設定します。それ以外の場合は、値を false に設定します。データではなくオブジェクト定義(スキーマ)のみをエクスポートする場合は、schema_only フラグを使用します。エクスポートするテーブルを指定する場合は、tables フィールドを使用します。複数のテーブルを選択するには、テーブル名のカンマ区切りリストを指定するか、パターンにワイルドカード文字を記述します。

    JSON 本文のリクエスト:

    {
      "gcs_destination": {
        "uri": "gs://BUCKET_NAME/PATH_TO_SQL_FILE"
      },
      "database": "DATABASE_NAME",
      "sql_export_options": {
        "schema_only": true,
        "tables": [
         "TABLE1",
         "TABLE2"
        ],
        "clean_target_objects": false,
        "if_exist_target_objects": true
      }
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    curl(Linux、macOS、Cloud Shell)

    リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

       curl -X POST \
             -H "Authorization: Bearer $(gcloud auth print-access-token)" \
             -H "Content-Type: application/json; charset=utf-8" \
             -d @request.json \
             "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"
       

    PowerShell(Windows)

    リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

       $cred = gcloud auth print-access-token
       $headers = @{ "Authorization" = "Bearer $cred" }
    
       Invoke-WebRequest `
         -Method POST `
         -Headers $headers `
         -ContentType: "application/json; charset=utf-8" `
         -InFile request.json `
       -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
       

    次のような JSON レスポンスが返されます。

    レスポンス

    {
      "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
        "createTime": "2024-09-17T06:05:31.244428646Z",
        "target": "projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID",
        "verb": "export",
        "requestedCancellation": false,
        "apiVersion": "v1"
      },
      "done": false
    }
    
  5. 以前に設定した IAM ロールを保持する必要がない場合は、この時点で削除してください。

リクエストのパラメータの一覧については、clusters:export をご覧ください。

次のステップ