このページでは、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 ダンプファイルにエクスポートする
AlloyDB からのエクスポートを実行する際は、gcloud CLI と API のいずれの場合も 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
(省略可): 設定すると、--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
コマンドのリファレンス ページをご覧ください。上記の手順で設定した 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
の場合、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 }
上記の手順で設定した IAM ロールを保持する必要がない場合は、この時点で削除します。
このリクエストのパラメータの一覧については、clusters:export
をご覧ください。
次のステップ
- CSV ファイルをエクスポートする方法を確認する。
- データのエクスポートをキャンセルする。