导入 SQL 文件

本页面介绍了如何将数据从存储在 Cloud Storage 存储桶中的 SQL 文件导入到 AlloyDB for PostgreSQL 集群中。SQL 文件是包含一系列 SQL 命令的纯文本文件。

您可以取消将数据导入 AlloyDB 集群。如需了解详情,请参阅取消导入操作

导入 SQL 转储文件时,确保创建转储文件的 PostgreSQL 版本与 AlloyDB 实例的 PostgreSQL 版本兼容。由于 SQL 语法不兼容,将转储文件从较高版本导入到较低版本可能会失败。

准备工作

在开始导入操作之前,请满足以下条件:

  • 确保您的数据库具有足够的存储空间配额。
  • 导入操作会使用数据库资源,但不会干扰正常的数据库操作,除非集群预配不足。

导入到 AlloyDB 所需的角色和权限

如需将数据从 Cloud Storage 导入到 AlloyDB 中,启动导入的用户必须拥有以下角色之一:

此外,AlloyDB 集群的服务账号必须拥有以下角色之一:

  • storage.objectViewer IAM 角色
  • 包括以下权限的自定义角色:
    • storage.objects.get

如需有关 IAM 角色的帮助,请参阅 Identity and Access Management

将 SQL 文件导入 AlloyDB 集群

如需使用 SQL 文件将数据导入 AlloyDB 集群,请按以下步骤操作:

控制台

  1. 前往集群页面。

    转到集群

  2. 点击某个集群名称,打开该集群的概览页面。

  3. 点击导入

  4. 文件格式中,选择 SQL

  5. 选择源文件中,选择是从您的计算机上传文件,还是从某个 Cloud Storage 位置选择文件。

    1. 如需从您的计算机上传文件,请执行以下操作:

      1. 选择从您的计算机上传文件
      2. 点击选择本地文件旁边的浏览,从您的本地计算机中选择一个 SQL 文件。
      3. 点击选择 Cloud Storage 位置旁边的浏览,选择用于存储所上传本地文件的 Cloud Storage 位置。
      4. 点击上传,上传该文件。
    2. 如需选择 Cloud Storage 存储桶中已有的 SQL 文件,请执行以下操作:

      1. 选择从 Google Cloud Storage 中选择文件
      2. 点击 bucket-name/file-name 旁边的浏览,从 Cloud Storage 存储桶中选择一个 SQL 文件。
  6. 数据库下拉菜单中选择要将数据导入到的数据库。

    这样,AlloyDB 会在导入数据之前运行 USE DATABASE 语句。如果您的 SQL 转储文件包含 USE DATABASE 语句,它将替换您在 Google Cloud 控制台中设置的数据库。

  7. 可选。如需为导入操作指定用户,请点击显示用户选项,然后在用户字段中输入用户名。

  8. 如需开始导入操作,请点击导入

gcloud

  1. 创建 Cloud Storage 存储桶
  2. 将 SQL 文件上传到您的存储桶。如需有关将文件上传到存储桶方面的帮助,请参阅上传对象

  3. 使用 gcloud storage buckets add-iam-policy-binding 向 AlloyDB 集群服务账号授予 storage.objectViewer IAM 角色以用于存储桶:

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

    进行以下替换:

    • CLUSTER_NAME:集群的名称。
    • REGION:部署 AlloyDB 集群的区域。
    • BUCKET_NAME:Cloud Storage 存储桶名称。
    • FILE_NAME:CSV 文件的名称。
    • DATABASE_NAME:集群内数据库的名称。
    • USER:执行导入操作的用户。
    • TABLE_NAME:数据库内的表。

    如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限

  4. 导入文件:

    gcloud alloydb clusters import CLUSTER_NAME --region=REGION --database=DATABASE_NAME --gcs-uri='gs://BUCKET_NAME/PATH_TO_SQL_FILE' --user=USERNAME --sql

    如果该命令返回 PERMISSION_DENIED 之类的错误,请检查权限。

    如需了解如何使用 import 命令,请参阅 alloydb import 命令参考页面。

  5. 如果您不需要保留之前设置的 IAM 权限,请使用 gcloud storage buckets remove-iam-policy-binding 移除这些权限。

REST v1

  1. 创建 Cloud Storage 存储桶
  2. 将 SQL 文件上传到您的存储桶。如需有关将文件上传到存储桶方面的帮助,请参阅上传对象
  3. 为服务账号授予 Cloud Storage 存储桶的权限,以便执行导入操作。使用服务账号格式确定要导入到其中的项目的服务账号。服务账号的格式如下所示:

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
  4. 使用 gcloud storage buckets add-iam-policy-binding 向 AlloyDB 集群服务账号授予 storage.objectViewer IAM 角色以用于存储桶。如需有关设置 IAM 权限的帮助,请参阅使用 IAM 权限

  5. 导入 SQL 文件。

    使用以下 HTTP 方法和网址:

    POST https://alloydbadmin.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID:import

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:项目 ID。
    • LOCATION_ID:部署 AlloyDB 集群的区域。
    • CLUSTER_ID:集群 ID。
    • BUCKET_NAME:Cloud Storage 存储桶名称。
    • PATH_TO_SQL_FILE:SQL 文件的路径。
    • USER:用于执行导入操作的用户。
    • DATABASE_NAME:AlloyDB 集群内数据库的名称。

    请求 JSON 正文:

    {
       "gcsUri": "gs://BUCKET_NAME/PATH_TO_SQL_FILE",
       "database": "DATABASE_NAME",
       "user": "USER",
       "sqlImportOptions": {}
    }
    

    如需发送您的请求,请展开以下选项之一:

    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/LOCATION_ID/clusters/CLUSTER_ID:import"
    

    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/LOCATION_ID/clusters/CLUSTER_ID:import"| Select-Object -Expand Content
    

    您会收到类似以下内容的 JSON 响应:

    响应

    {
     "name": "projects/project-id/locations/location-id/operations/operation-id",
     "metadata": {
      "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
      "createTime": "2025-01-04T13:12:32.363393723Z",
      "target": "projects/project-id/locations/location-id/clusters/cluster-id",
      "verb": "import",
      "requestedCancellation": false,
      "apiVersion": "v1"
     },
     "done": false
    }
    

    如需使用其他用户身份执行导入操作,请指定用户属性。

  6. 如果您不需要保留之前设置的 IAM 权限,请立即移除这些权限。

    如需查看用于请求的完整参数列表,请参阅 clusters:import

检查导入操作的状态

如需检查导入操作的状态,请按照以下步骤操作:

gcloud

使用 gcloud alloydb operations describe 命令运行以下内容:

gcloud alloydb operations describe OPERATION_ID --region=REGION

您还可以列出特定操作的详细信息,或者取消特定操作。如需详细了解此命令,请参阅 gcloud alloydb operations 命令参考页面。

REST v1

使用 GET 方法和以下网址:

GET https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

如需了解详情,请参阅 get

在使用任何请求数据之前,请先进行以下替换:

  • REGION:部署 AlloyDB 集群的区域。
  • PROJECT_ID:项目 ID。
  • OPERATION_ID:导入操作的 ID。如需了解详情,请参阅准备工作

如需发送您的请求,请展开以下选项之一:

curl(Linux、macOS 或 Cloud Shell)

执行以下命令:

  curl -X GET \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
 

PowerShell (Windows)

执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID | Select-Object -Expand Content

您会收到类似以下内容的 JSON 响应:

如果成功,响应正文将包含一个 Operation 实例。

后续步骤