匯入 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 角色相關說明,請參閱「身分與存取權管理」。

將 SQL 檔案匯入 AlloyDB 叢集

如要使用 SQL 檔案將資料匯入 AlloyDB 叢集,請按照下列步驟操作:

控制台

  1. 前往「Clusters」(叢集) 頁面。

    前往叢集

  2. 按一下叢集名稱,開啟該叢集的「總覽」頁面。

  3. 按一下「匯入」

  4. 在「檔案格式」中,選取「SQL」

  5. 在「選取來源檔案」中,選擇從電腦上傳檔案,或從 Cloud Storage 位置選取檔案。

    1. 如要上傳電腦中的檔案,請按照下列步驟操作:

      1. 選取「從電腦上傳檔案」
      2. 按一下「選取本機檔案」旁的「瀏覽」,從本機選取 SQL 檔案。
      3. 按一下「選取 Cloud Storage 位置」旁的「瀏覽」,選取要儲存上傳本機檔案的 Cloud Storage 位置。
      4. 按一下「上傳」即可上傳檔案。
    2. 如要選取 Cloud Storage bucket 中的 SQL 檔案,請按照下列步驟操作:

      1. 選取「從 Google Cloud Storage 選取檔案」
      2. 按一下「bucket-name/file-name」(bucket 名稱/檔案名稱) 旁邊的「Browse」(瀏覽),從 Cloud Storage bucket 選取 SQL 檔案。
  6. 從「資料庫」下拉式選單中,選取要匯入資料的資料庫。

    這樣會使 AlloyDB 在匯入之前執行 USE DATABASE 陳述式。如果 SQL 傾印檔案包含 USE DATABASE 陳述式,系統會覆寫您在 Google Cloud 主控台中設定的資料庫。

  7. (選用步驟) 如要為匯入作業指定使用者,請按一下「顯示使用者選項」,然後在「使用者」欄位中輸入使用者名稱。

  8. 如要啟動匯入作業,請按一下「匯入」

gcloud

  1. 建立 Cloud Storage 值區
  2. 將 SQL 檔案上傳至 bucket。 如需將檔案上傳至值區的說明,請參閱上傳物件

  3. 使用 gcloud storage buckets add-iam-policy-binding,將 storage.objectViewer IAM 角色授予 AlloyDB 叢集服務帳戶,以存取該 bucket:

    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 檔案上傳至 bucket。 如需將檔案上傳至值區的說明,請參閱上傳物件
  3. 授予服務帳戶 Cloud Storage 值區的權限,以執行匯入作業。使用服務帳戶格式,找出要匯入專案的服務帳戶。服務帳戶的格式如下:

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
  4. 使用 gcloud storage buckets add-iam-policy-binding,將 storage.objectViewer 身分與存取權管理角色授予 AlloyDB 叢集服務帳戶。如需設定 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 的執行個體。

後續步驟