建立及管理資料庫

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

(default) 資料庫

如未指定資料庫,Firestore 用戶端程式庫和 Google Cloud CLI 預設會連線至 (default) 資料庫。

必要的角色

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

所需權限

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

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

建立資料庫

如要建立資料庫,請使用下列其中一種方法:

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

    前往「資料庫」

  2. 點選「建立 Firestore 資料庫」
  3. 輸入資料庫 ID。
  4. 選取 Firestore 版本。如要進一步瞭解各版本,請參閱版本總覽
  5. 選取資料存取模式。資料存取模式會設定您可搭配資料庫使用的 API 和用戶端程式庫。
  6. 如果選取原生模式的 Firestore:
    • 設定初始安全性規則。如果不打算使用 Firebase 行動和網頁 SDK,請選取「限制性」
    • 如果選取 Enterprise 版,請啟用或停用資料庫的即時更新功能。
  7. 選取位置。
  8. (選用) 如需客戶自行管理的加密金鑰 (CMEK),請展開並設定加密選項
  9. 按一下 [Create Database] (建立資料庫)。
gcloud

使用 gcloud firestore databases create 指令。

  • 如要以原生模式建立 Firestore Enterprise 版資料庫,請按照下列步驟操作:

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

    更改下列內容:

  • 如要建立 Firestore Standard 版資料庫,請按照下列步驟操作:

    gcloud firestore databases create \
    --database=DATABASE_ID \
    --location=LOCATION \
    --edition=standard
    --type=DATABASE_TYPE

    更改下列內容:

--delete-protection 是啟用防刪除功能的選用旗標。您必須先停用這項設定,才能刪除已啟用防刪除功能的資料庫。這項設定預設為停用。

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

  • --tags=123/environment=production,123/costCenter=marketing
  • --tags=tagKeys/333=tagValues/444
Firebase CLI
firebase firestore:databases:create DATABASE_ID \
--location=LOCATION \
[--delete-protection DELETE_PROTECTION_ENABLEMENT]

更改下列內容:

--delete-protection 是啟用防刪除功能的選用引數。如要刪除已啟用防刪除功能的資料庫,請先停用這項設定。這項設定預設為停用。

Terraform
resource "google_firestore_database" "database" {
  project     = "project-id"
  name        = DATABASE_ID
  location_id = LOCATION
  type        = DATABASE_TYPE

  // Optional
  delete_protection_state = DELETE_PROTECTION_STATE
}

更改下列內容:

  • DATABASE_ID有效的資料庫 ID
  • LOCATIONFirestore 多區域或區域的名稱。
  • DATABASE_TYPE:原生模式為 FIRESTORE_NATIVE,Datastore 模式為 DATASTORE_MODE
  • DELETE_PROTECTION_ENABLEMENTDELETE_PROTECTION_ENABLEDDELETE_PROTECTION_DISABLED

delete_protection_state 是啟用防刪除功能的選用引數。啟用防刪除功能後,您必須先停用這項設定,才能刪除資料庫。這項設定預設為停用。

資料庫 ID

有效的資料庫 ID 包括 (default),以及符合下列條件的 ID:

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

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

刪除防護措施

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

為資料庫設定 Firestore 安全性規則

使用 Firebase CLI 將 Firestore 安全性規則部署至每個資料庫。請參閱管理及部署 Firestore 安全性規則的指南

使用用戶端程式庫存取具名資料庫

已命名的資料庫是指名稱不是 (default) 的資料庫。根據預設,Firebase SDK 和 Google API 用戶端程式庫會連線至專案中的 Firestore 資料庫。(default)如要建立連線至具名資料庫的用戶端,請在例項化用戶端時設定資料庫 ID。

可列出資料庫

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

控制台

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

前往「資料庫」

gcloud

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

gcloud firestore databases list
Firebase CLI

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

firebase firestore:databases:list

查看資料庫詳細資料

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

gcloud

使用 gcloud firestore databases describe 指令:

gcloud firestore databases describe --database=DATABASE_ID
Firebase CLI

使用 firebase firestore:databases:get 指令:

firebase firestore:databases:get DATABASE_ID

DATABASE_ID 替換為資料庫 ID。

更新資料庫設定

如要更新資料庫的設定,請使用 gcloud firestore databases update 指令。使用這個指令可變更資料庫類型,或切換刪除保護機制。

變更資料庫類型

如要更新資料庫類型,請使用 gcloud firestore databases update 指令並加上 --type= 旗標。只有在資料庫沒有內容時,才能變更類型。

gcloud
gcloud firestore databases update --database=DATABASE_ID \
--type=DATABASE_TYPE

更改下列內容:

  • DATABASE_ID:資料庫 ID。
  • DATABASE_TYPE:原生模式為 firestore-native,Datastore 模式為 datastore-mode

更新防刪除設定

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

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

DATABASE_ID 替換為資料庫 ID。

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

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

DATABASE_ID 替換為資料庫 ID。

刪除資料庫

如要刪除資料庫,請使用主控台或指令列工具。

如果資料庫已啟用防刪除設定,請先停用防刪除功能

如果資料庫包含 App Engine 搜尋資料Blob 實體,您必須先刪除這些資料。

刪除資料庫時,相關的 Eventarc 觸發條件不會自動隨之刪除,觸發條件會停止傳送事件,但會持續保留到手動刪除為止。

刪除資料庫不會產生刪除作業費用。

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

    前往「資料庫」

  2. 在要刪除的資料庫所屬資料列中,按一下「查看更多」。按一下「Delete」(刪除)。對話方塊隨即出現。
  3. 在「Delete database?」(要刪除資料庫嗎?) 對話方塊中,在文字欄位輸入資料庫 ID,確認要刪除。按一下「Delete」(刪除)。控制台會通知您作業成功或失敗。

    如果作業失敗,請查看資料庫詳細資料,並確認刪除保護機制已停用。如要停用防刪除功能,請參閱「更新防刪除設定」。

gcloud

使用 `gcloud firestore databases delete` 指令。

gcloud firestore databases delete --database=DATABASE_ID

DATABASE_ID 替換為要刪除的資料庫 ID。如要刪除預設資料庫,請使用 ID '(default)'

複製資料庫

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

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

    Firestore 會使用來源資料庫的時間點復原 (PITR) 資料進行複製。複製的資料庫包括所有資料和索引。

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

  • 時間戳記的精細度為一分鐘,且指定過去的時間點,該時間點位於 PITR 視窗定義的期間內:

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

控制台

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

    前往「資料庫」

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

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

    1. 在「為本機副本提供 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_TIMESTAMPPITR 時間戳記,採用 RFC 3339 格式,精確度為分鐘。例如:2025-06-01T10:20:00.00Z2025-06-01T10:30:00.00-07:00

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

範例:

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 旗標,這是要繫結的標記 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'

根據預設,複製的資料庫會與來源資料庫採用相同的加密設定。如要變更加密設定,請使用 --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/(default)' \
--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:代表特定 Google 帳戶的電子郵件地址,例如: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:代表特定 Google 帳戶的電子郵件地址,例如: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:代表特定 Google 帳戶的電子郵件地址,例如:alice@example.com

Cloud Monitoring

Firestore 指標會回報給兩個受監控的資源。

您可以查看 firestore.googleapis.com/Database,檢查資料庫層級的匯總指標。firestore_instance 下方顯示的指標是專案層級的匯總資料。

限制

  • 每個專案最多可有 100 個資料庫。如要提高這項上限,請與支援團隊聯絡
  • 如果資料庫含有任何 GAE 搜尋資料,就無法刪除該資料庫。(default)使用索引刪除 API 刪除 GAE 搜尋資料。如果您最近刪除了 GAE 搜尋資料,可能需要等待一段時間才能刪除資料庫。
  • 如果 (default) 資料庫含有任何 blob 實體,就無法刪除。使用 Blobstore 刪除 API 刪除 Blobstore 資料。 如要檢查 (default) 資料庫是否含有 Blobstore 資料,請在 Google Cloud 控制台中執行下列 GQL 查詢:SELECT * FROM __BlobInfo__
  • 刪除資料庫後,必須等待 5 分鐘才能重複使用資料庫 ID。
  • Cloud Functions 第 1 版不支援 Firestore 具名資料庫。使用 Cloud Firestore 觸發條件 (第 2 代) 為具名資料庫設定事件。
  • 資料庫刪除後,即使建立同名的新資料庫,Firestore 函式觸發程序第 1 版Firestore 事件觸發程序也可能會停止運作。

後續步驟