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 ダンプファイルにエクスポートする

AlloyDB からのエクスポートを実行する際は、gcloud CLI と API のいずれの場合も 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(省略可): 設定すると、--clean-target-objects モードでオブジェクトがドロップされる前に、DROP ... IF EXISTS コマンドによってそのオブジェクトの存在が確認されます。

    このような機能を使用するには、該当するオプションを 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 の場合、clean_target_objects モードでオブジェクトがドロップされる前に、DROP ... IF EXISTS コマンドによってそのオブジェクトの存在が確認されます。

    これらの機能を使用する場合は、該当するパラメータの値を 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 をご覧ください。

次のステップ