このページでは、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)ロールが必要です。
- Cloud AlloyDB 管理者(
roles/alloydb.admin
)ロール - 次の権限を含むカスタムロール。
alloydb.clusters.get
alloydb.clusters.export
また、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
- Cloud Storage バケットを作成する。
指定された形式を使用して、エクスポート元のプロジェクトのサービス アカウントを特定します。サービス アカウントの形式は次のとおりです。
service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
エクスポート オペレーション用の Cloud Storage バケットに対する権限をサービス アカウントに付与します。
gcloud storage buckets add-iam-policy-binding
を使用して、サービス アカウントにstorage.objectAdmin
IAM ロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。データベースを 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
コマンドのリファレンス ページをご覧ください。以前に設定した IAM ロールを保持する必要がない場合は、この時点でロールを取り消ししてください。
REST v1
エクスポート先のバケットを作成します。
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
サービス アカウントの形式を使用して、エクスポート元のプロジェクトのサービス アカウントを特定します。
サービス アカウントの形式は次のとおりです。
service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
エクスポート オペレーション用の Cloud Storage バケットに対する権限をサービス アカウントに付与します。
gcloud storage buckets add-iam-policy-binding
を使用して、サービス アカウントにstorage.objectAdmin
IAM ロールを付与します。IAM 権限の設定については、IAM 権限の使用をご覧ください。データベースをエクスポートします。
次の 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 }
以前に設定した IAM ロールを保持する必要がない場合は、この時点で削除してください。
リクエストのパラメータの一覧については、clusters:export
をご覧ください。
次のステップ
- CSV ファイルをエクスポートする方法を確認する
- データ エクスポートをキャンセルする。