本頁面說明如何建立、更新及刪除 Cloud Firestore 資料庫。每項專案可建立多個 Cloud Firestore 資料庫。您可以使用多個資料庫設定正式環境和測試環境、隔離客戶資料,以及進行資料區域化。
必要角色和權限
如要建立及管理資料庫,您必須具備下列 Identity and Access Management 角色:
- Cloud Datastore 擁有者 (
roles/datastore.owner)
這個角色會授予下列權限,讓您建立及管理資料庫:
- 建立資料庫:
datastore.databases.create - 讀取資料庫設定:
datastore.databases.getMetadata - 設定資料庫:
datastore.databases.update - 刪除資料庫:
datastore.databases.delete - 複製資料庫:
datastore.databases.clone
建立資料庫
如要建立資料庫,請使用下列任一方法:
控制台
Firebase 控制台
-
在 Firebase 控制台中,依序前往「Databases & Storage」(資料庫和儲存空間) >「Firestore」。
- 按一下「新增資料庫」。
- 選取「Standard 版」。點選「下一步」。
- 輸入資料庫 ID。
- 選取資料庫位置。點選「下一步」。
-
選取 Cloud Firestore Security Rules 的起始模式:
- 測試模式
- 適合用於開始使用行動和網頁用戶端程式庫,但允許任何人讀取及覆寫資料。測試完成後,請務必詳閱「保護資料」一節。
- 正式環境模式
- 拒絕所有來自行動和網路用戶端的讀寫要求。您的已驗證應用程式伺服器 (Node.js、Python、Java) 仍可存取資料庫
- 點選「建立」。
gcloud
使用 gcloud firestore databases create 指令。
-
如要建立 Cloud Firestore Standard 版本資料庫,請按照下列步驟操作:
gcloud firestore databases create \ --database=DATABASE_ID \ --location=LOCATION \ --edition=standard --type=DATABASE_TYPE
更改下列內容:
- DATABASE_ID:有效的資料庫 ID。
- LOCATION:Cloud Firestore 多區域或區域的名稱。
- DATABASE_TYPE:原生模式為
firestore-native,Datastore 模式則為datastore-mode。
--delete-protection 是選用旗標,可啟用防刪除功能。如要刪除已啟用防刪除功能的資料庫,請先停用這項設定。這個設定預設為停用。
--tags=123/environment=production,123/costCenter=marketing--tags=tagKeys/333=tagValues/444
Firebase CLI
firebase firestore:databases:create DATABASE_ID \n--location=LOCATION \n[--edition EDITION] \n[--firestore-data-access FIRESTORE_ACCESS] \n[--realtime-updates REALTIME_UPDATES] \n[--delete-protection DELETE_PROTECTION_ENABLEMENT]
更改下列內容:
- DATABASE_ID:有效的資料庫 ID。
- LOCATION:Cloud Firestore 多區域或區域的名稱。
- EDITION:如要使用 Enterprise 功能,請設為
enterprise。 - FIRESTORE_ACCESS:(僅限 Enterprise)
ENABLED或DISABLED。 - REALTIME_UPDATES:(僅限 Enterprise)
ENABLED或DISABLED。 - DELETE_PROTECTION_ENABLEMENT:
ENABLED或DISABLED。
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。
- LOCATION:Cloud Firestore 多區域或區域的名稱。
- DATABASE_TYPE:原生模式為
FIRESTORE_NATIVE,Datastore 模式則為DATASTORE_MODE。 - DELETE_PROTECTION_ENABLEMENT:
DELETE_PROTECTION_ENABLED或DELETE_PROTECTION_DISABLED。
delete_protection_state 是選用引數,可啟用防刪除功能。如要刪除已啟用防刪除功能的資料庫,請先停用這項設定。這項設定預設為停用。
資料庫 ID
有效的資料庫 ID 必須符合下列規則:
- 只能使用英文字母、數字和連字號 (
-)。 - 英文字母必須為小寫。
- 第一個字元必須是字母。
- 最後一個字元須為英文字母或數字。
- 至少 4 個字元。
- 最多 63 個字元。
- 不得為 UUID 或類似 UUID。舉例來說,請勿使用
f47ac10b-58cc-0372-8567-0e02b2c3d479這樣的 ID。
這些規則有一個例外狀況:如果您未自行輸入 ID,Standard 版會建立名為 (default) 的資料庫。
請注意,刪除資料庫後,約 5 分鐘內無法重複使用其 ID。
防刪除功能
使用防刪除功能,防止資料庫遭到意外刪除。如要刪除已啟用防刪除功能的資料庫,請先將防刪除功能停用。刪除防護功能預設為停用。您可以更新資料庫設定,啟用或停用防刪除功能。
為資料庫設定 Cloud Firestore Security Rules
使用 Firebase CLI 將 Cloud Firestore Security Rules 部署至各個資料庫。請參閱管理及部署 Cloud Firestore Security Rules 的指南。
使用用戶端程式庫存取已命名的資料庫
具名資料庫包含任何不叫 (default) 的資料庫。根據預設,Firebase SDK 和 Google API 用戶端程式庫會連線至專案中的 (default)
Cloud Firestore 資料庫。如要建立連線至具名資料庫的用戶端,請在例項化用戶端時設定資料庫 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
Enterprise 資料庫的輸出內容包含下列欄位:
Edition:ENTERPRISEFirestore Data Access:DATA_ACCESS_MODE_ENABLED或DATA_ACCESS_MODE_DISABLEDMongoDB Compatible Data Access:DATA_ACCESS_MODE_ENABLED或DATA_ACCESS_MODE_DISABLEDRealtime Updates:REALTIME_UPDATES_ENABLED或REALTIME_UPDATES_DISABLED
將 DATABASE_ID 替換為資料庫 ID。
更新資料庫設定
如要更新資料庫的設定,請使用 gcloud firestore
databases
update 指令。使用這個指令,即可啟用或停用防刪除功能。
更新防刪除功能設定
如要啟用資料庫的防刪除功能,請使用 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 觸發條件並不自動隨之刪除,觸發條件會停止傳送事件,但會持續存在,直到您刪除觸發條件為止。
刪除資料庫不會產生刪除作業費用。
控制台
-
在 Firebase 控制台中,依序前往「Databases & Storage」(資料庫和儲存空間) >「Firestore」。
- 在「Data」(資料) 分頁中,按一下資料庫資料表檢視畫面上的 ,然後選取「Delete database」(刪除資料庫)。
- 按照操作說明刪除資料庫。
gcloud
使用 `gcloud firestore databases delete` 指令。
gcloud firestore databases delete --database=DATABASE_ID
將 DATABASE_ID 替換為要刪除的資料庫 ID。如要刪除預設資料庫,請使用 ID '(default)'
複製資料庫
您可以將現有資料庫在指定時間戳記的狀態,複製到新的資料庫:
複製的資料庫是新資料庫,會在與來源資料庫相同的位置建立。
Cloud Firestore 會使用來源資料庫的時間點復原 (PITR) 資料建立複製版本。複製的資料庫包含所有資料和索引。
根據預設,複製的資料庫會採用與來源資料庫相同的加密方式,也就是 Google 的預設加密機制或 CMEK 加密。您可以指定其他加密類型,或使用其他金鑰進行 CMEK 加密。
時間戳記的精細程度為一分鐘,並指定過去的時間點,時間範圍由 PITR 視窗定義:
- 如果資料庫已啟用 PITR,您可以選取過去 7 天內的任何時間點 (如果 PITR 啟用時間不到 7 天,則可選取的時間範圍會更短)。
- 如果未啟用 PITR,則可選取過去一小時內的任一分鐘。
- 您可以在資料庫說明中查看可選取的最早時間戳記。
控制台
在 Firebase 控制台中,依序開啟「Databases & Storage」(資料庫和儲存空間) >「Firestore」頁面。
按一下資料庫名稱旁的 ,然後點選「Clone database」(複製資料庫)。「Clone database」(複製資料庫) 窗格隨即顯示。
在「Clone database」(複製資料庫) 窗格中,提供複製資料庫的參數:
在「Database ID」(資料庫 ID) 欄位中,輸入新複製資料庫的資料庫 ID。資料庫 ID 不得與現有資料庫重複。
在「Clone from」(複製來源) 欄位中,選取要用於複製的時間點。所選時間對應至 PITR 時間戳記,精細程度為分鐘。
按一下 [Clone] (複製)。
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 格式的時間點復原時間戳記,精細程度為分鐘。例如:
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/(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'
Firebase CLI
使用 firebase firestore:databases:clone 指令複製資料庫:
firebase firestore:databases:clone \
'SOURCE_DATABASE' \
'DESTINATION_DATABASE' \
--snapshot-time 'PITR_TIMESTAMP'
更改下列內容:
SOURCE_DATABASE:要複製的現有資料庫名稱。名稱格式為
projects/PROJECT_ID/databases/SOURCE_DATABASE_ID。DESTINATION_DATABASE:新複製 資料庫的名稱。名稱格式為
projects/PROJECT_ID/databases/DESTINATION_DATABASE_ID。這個資料庫名稱不得與現有資料庫相關聯。PITR_TIMESTAMP:RFC 3339 格式的時間點復原時間戳記,精細程度為分鐘。例如:
2025-06-01T10:20:00.00Z或2025-06-01T10:30:00.00-07:00。如未指定,系統會選擇目前時間,並無條件捨去至分鐘。
根據預設,複製的資料庫會與來源資料庫採用相同的加密設定。如要變更加密設定,請使用 --encryption-type 引數:
- (預設)
USE_SOURCE_ENCRYPTION:使用與來源資料庫相同的加密設定。 GOOGLE_DEFAULT_ENCRYPTION:使用 Google 的預設加密機制。CUSTOMER_MANAGED_ENCRYPTION:使用 CMEK 加密。在--kms-key-name引數中指定金鑰 ID。
設定各資料庫的存取權限
您可以使用 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:專案 IDEMAIL:代表特定 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:專案 IDEMAIL:代表特定 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:專案 IDEMAIL:代表特定 Google 帳戶的電子郵件地址。例如:alice@example.com。
Cloud Monitoring
Cloud Firestore 指標會顯示在兩項受監控資源下方。
您可以查看 firestore.googleapis.com/Database,在資料庫層級檢查匯總指標。firestore_instance 下回報的指標會在專案層級匯總。
限制
- 每個專案最多可有 100 個資料庫。如要提高這項限制,請聯絡支援團隊。
- 如果
(default)資料庫含有任何 GAE 搜尋資料,就無法刪除。使用索引刪除 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 函式觸發條件 v1 和 Firestore 事件觸發條件可能會停止運作,即使建立同名的新資料庫也一樣。