建立及管理資料庫

本頁面說明如何建立、更新及刪除 Cloud Firestore 資料庫。每個專案可建立多個 Cloud Firestore 資料庫。您可以使用多個資料庫來設定正式和測試環境、隔離客戶資料,以及進行資料區域化。

免費方案用量

Cloud Firestore 提供免費方案,無須付費即可開始使用。

免費方案僅適用於每項專案的一個 Cloud Firestore 資料庫。在沒有免費方案資料庫的專案中,第一個建立的資料庫會獲得免費方案。如果刪除套用免費方案的資料庫,下一個建立的資料庫就會套用免費方案。

事前準備

建立資料庫前,請務必完成下列事項:

  1. 如果您尚未建立 Firebase 專案,請前往 Firebase 控制台,按一下「Add project」(新增專案),然後按照畫面上的指示建立 Firebase 專案,或將 Firebase 服務新增至現有的 Google Cloud 專案。

  2. 指派適當的身分與存取權管理角色,詳情請參閱下一節。

必要的角色

如要建立及管理資料庫,您必須具備 Owner 或 Datastore Owner Identity and Access Management 角色。這些角色會授予必要權限。

所需權限

您必須具備下列權限,才能管理資料庫:

  • 建立資料庫:datastore.databases.create
  • 讀取資料庫設定:datastore.databases.getMetadata
  • 設定資料庫:datastore.databases.update
  • 刪除資料庫:datastore.databases.delete
  • 複製資料庫:datastore.databases.clone

建立資料庫

如要建立 Cloud Firestore 資料庫,請使用下列任一方法:

Firebase 控制台
  1. 在 Firebase 控制台中,前往「Firestore Database」頁面。

    前往「Firestore Database」

  2. 按一下「新增資料庫」。
  3. 選取「Enterprise edition」。點選「下一步」。
  4. 選取「Firestore with MongoDB compatibility」(與 MongoDB 相容的 Firestore)。
  5. 輸入資料庫 ID。
  6. 選取資料庫位置。
  7. 點選「建立」。
Firebase CLI
firebase firestore:databases:create --edition enterprise DATABASE_ID \n--location=LOCATION \n[--firestore-data-access FIRESTORE_ACCESS] \n[--mongodb-compatible-data-access MONGODB_ACCESS] \n[--realtime-updates REALTIME_UPDATES]

更改下列內容:

  • DATABASE_ID:有效的資料庫 ID。
  • LOCATION:Cloud Firestore 多區域或區域的名稱。
  • FIRESTORE_ACCESS:ENABLED 或 DISABLED。預設為 ENABLED。
  • MONGODB_ACCESS:ENABLED 或 DISABLED。預設為 DISABLED。
  • REALTIME_UPDATES:ENABLED 或 DISABLED。如果啟用 firestore-data-access,則預設為 ENABLED。
gcloud CLI

使用 gcloud firestore databases create 指令並設定 --edition=enterprise。

gcloud firestore databases create \
--database=DATABASE_ID \
--location=LOCATION \
--edition=enterprise \
--enable-mongodb-compatible-data-access

更改下列內容:

如要啟用防刪除功能,請新增 --delete-protection 旗標。如要刪除已啟用防刪除功能的資料庫,請先停用這項設定。這個設定預設為停用。

gcloud firestore databases create \
--database=DATABASE_ID \
--location=LOCATION \
--edition=enterprise \
--delete-protection

如要將標記新增至資料庫,請使用 --tags 旗標。例如:

  • --tags=123/environment=production,123/costCenter=marketing
  • --tags=tagKeys/333=tagValues/444
Terraform

使用 google_firestore_database 資源,並將 database_edition 設為 ENTERPRISE

resource "google_firestore_database" "database" {
  name             = "DATABASE_ID"
  location_id      = "LOCATION"
  type             = "FIRESTORE_NATIVE"
  database_edition = "ENTERPRISE"

  // Optional
  delete_protection_state = "DELETE_PROTECTION_STATE"
}

更改下列內容:

如要啟用防刪除功能,請將 delete_protection_state 設為 DELETE_PROTECTION_ENABLED。如要刪除已啟用防刪除功能的資料庫,請先停用這項設定。這項設定預設為停用。

資料庫 ID

有效的資料庫 ID 必須符合下列條件:

  • 只能包含英文字母、數字和連字號 (-)。
  • 英文字母必須為小寫。
  • 第一個字元必須是字母。
  • 最後一個字元須為英文字母或數字。
  • 至少 4 個字元。
  • 最多 63 個字元。
  • 不得為 UUID 或類似 UUID。舉例來說,請勿使用 f47ac10b-58cc-0372-8567-0e02b2c3d479 這樣的 ID。

刪除資料庫後,需等待 5 分鐘才能再次使用該資料庫 ID。

防刪除功能

使用防刪除功能,防止資料庫遭到意外刪除。刪除保護功能的運作方式如下:

  • 如要刪除已啟用防刪除功能的資料庫,請先將防刪除功能停用。
  • 刪除防護功能預設為停用。
  • 您可以在建立資料庫時啟用防刪除功能,也可以更新資料庫設定來啟用這項功能。

可列出資料庫

使用下列其中一種方法列出資料庫:

Firebase 控制台
  1. 在 Firebase 控制台中,前往「Firestore Database」頁面。

    前往「Firestore Database」

  2. 按一下「Cloud Firestore」,查看專案的所有資料庫。
gcloud CLI

使用 gcloud firestore databases list 指令,列出專案中的所有資料庫。

gcloud firestore databases list

查看資料庫詳細資料

如要查看單一資料庫的詳細資料,請使用下列其中一種方法:

Firebase 控制台
  1. 在 Firebase 控制台中,前往「Firestore Database」頁面。

    前往「Firestore Database」

  2. 從資料庫清單中選取資料庫。
gcloud CLI

使用 gcloud firestore databases describe 指令:

gcloud firestore databases describe --database=DATABASE_ID

將 DATABASE_ID 替換為資料庫 ID。

更新資料庫設定

如要更新資料庫的設定,請使用 gcloud firestore databases update 指令。

使用這個指令,即可變更、啟用或停用防刪除功能。

更新防刪除功能設定

如要啟用資料庫的防刪除功能,請使用 gcloud firestore databases update 指令並加上 --delete-protection 旗標。例如:

gcloud CLI
gcloud firestore databases update --database=DATABASE_ID --delete-protection

將 DATABASE_ID 替換為資料庫 ID。

如要停用資料庫的防刪除功能,請使用 gcloud firestore databases update 指令並加上 --no-delete-protection 旗標。例如:

gcloud CLI
gcloud firestore databases update --database=DATABASE_ID --no-delete-protection

將 DATABASE_ID 替換為資料庫 ID。

刪除資料庫

如要刪除資料庫,請使用控制台或指令列工具。刪除資料庫不會產生刪除作業費用。

如果資料庫已啟用防刪除設定,您必須先停用防刪除功能。

Firebase 控制台
  1. 在 Firebase 控制台中,前往「Firestore Database」頁面。

    前往「Firestore Database」

  2. 選取要刪除的資料庫。
  3. 按一下「查看更多」圖示 。
  4. 按一下「Delete」(刪除),刪除資料庫。
gcloud CLI

使用 `gcloud firestore databases delete` 指令。

gcloud firestore databases delete --database=DATABASE_ID

將 DATABASE_ID 替換為要刪除的資料庫 ID。

複製資料庫

您可以將現有資料庫在指定時間戳記的狀態,複製到新的資料庫:

  • 複製的資料庫是新資料庫,會在與來源資料庫相同的位置建立。

    Cloud Firestore 會使用來源資料庫的時間點復原 (PITR) 資料建立複製版本。複製的資料庫包含所有資料和索引。

  • 根據預設,複製的資料庫會以與來源資料庫相同的方式加密,使用 Google 的預設加密或 CMEK 加密。您可以指定其他加密類型,或使用其他金鑰進行 CMEK 加密。

  • 時間戳記的精細程度為一分鐘,並指定過去的時間點,時間範圍由 PITR 期間定義:

    • 如果資料庫已啟用 PITR,您可以選取過去 7 天內的任何時間點 (如果 PITR 啟用時間不到 7 天,則可選取的時間範圍會更短)。
    • 如果未啟用 PITR,則可選取過去一小時內的任一分鐘。
    • 您可以在資料庫說明中查看可選取的最早時間戳記。

Google Cloud 控制台

  1. 前往 Google Cloud 控制台的「Databases」(資料庫) 頁面。

    前往「資料庫」

  2. 在資料庫表格列中,按一下「 查看更多」,按一下「Clone」。系統會隨即顯示「Create a clone」(建立複製版本) 對話方塊。

  3. 在「Create a clone」(建立複製版本) 對話方塊中,提供複製資料庫的參數:

    1. 在「Give the clone an ID」(為本機副本設定 ID) 欄位中,輸入新複製資料庫的資料庫 ID。這個資料庫 ID 不得與現有資料庫相關聯。

    2. 在「Clone from」(複製來源) 欄位中,選取要複製的時間點。所選時間對應至 PITR 時間戳記,精細程度為分鐘。

  4. 按一下 [建立本機複本]。

gcloud

使用 gcloud firestore databases clone 指令複製資料庫:

gcloud firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'

更改下列內容:

  • SOURCE_DATABASE:要複製的現有資料庫名稱。名稱格式為 projects/PROJECT_ID/databases/SOURCE_DATABASE_ID。

  • PITR_TIMESTAMP:RFC 3339 格式的 PITR 時間戳記,精細程度為分鐘。例如:2025-06-01T10:20:00.00Z 或 2025-06-01T10:30:00.00-07:00。

  • DESTINATION_DATABASE_ID:新複製資料庫的資料庫 ID。這個資料庫 ID 不得與現有資料庫相關聯。

範例:

gcloud firestore databases clone \
--source-database='projects/example-project/databases/example-source-db' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db'

如要在複製資料庫時繫結至某些標記,請使用先前的指令搭配 --tags 旗標,這是要繫結的標記 KEY=VALUE 組合選用清單。

範例:

gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--tags=key1=value1,key2=value2

根據預設,複製的資料庫會與來源資料庫採用相同的加密設定。如要變更加密設定,請使用 --encryption-type 引數:

  • (預設) use-source-encryption:使用與來源資料庫相同的加密設定。
  • google-default-encryption:使用 Google 的預設加密機制。
  • customer-managed-encryption:使用 CMEK 加密。在 --kms-key-name 引數中指定金鑰 ID。

以下範例說明如何為複製的資料庫設定 CMEK 加密:

gcloud firestore databases clone \
--source-database='projects/example-project/databases/example-source-db' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'

設定各資料庫的存取權限

您可以使用 Identity and Access Management 條件,在資料庫層級設定存取權限。下列範例使用 Google Cloud CLI,為一或多個資料庫指派條件式存取權。您也可以在 Google Cloud 控制台中定義 IAM 條件。

查看現有的 IAM 政策

gcloud projects get-iam-policy PROJECT_ID

將 PROJECT_ID 設為專案 ID。

授予資料庫存取權

gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' \
--condition='expression=resource.name=="projects/PROJECT_ID/databases/DATABASE_ID",title=TITLE,description=DESCRIPTION'

設定下列欄位:

  • PROJECT_ID:專案 ID
  • EMAIL:代表特定帳戶的電子郵件地址。例如:alice@example.com。
  • DATABASE_ID:資料庫 ID。
  • TITLE:運算式的選用標題。
  • DESCRIPTION:運算式的選用說明。

授予所有資料庫的存取權,但排除一個資料庫

gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' \
--condition='expression=resource.name!="projects/PROJECT_ID/databases/DATABASE_ID",title=TITLE,description=DESCRIPTION'

設定下列欄位:

  • PROJECT_ID:專案 ID
  • EMAIL:代表特定帳戶的電子郵件地址。例如:alice@example.com。
  • DATABASE_ID:資料庫 ID。
  • TITLE:運算式的選用標題。
  • DESCRIPTION:運算式的選用說明。

移除指定成員和角色的政策

gcloud projects remove-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' --all

設定下列欄位:

  • PROJECT_ID:專案 ID
  • EMAIL:代表特定帳戶的電子郵件地址。例如:alice@example.com。

限制

每個專案最多可有 100 個資料庫。如要提高這項限制,請聯絡支援團隊。

後續步驟