创建和管理数据库
本页介绍了如何创建、更新和删除 Firestore 数据库。每个项目可以创建多个 Firestore 数据库。您可以使用多个数据库来设置生产环境和测试环境、隔离客户数据以及进行数据区域化。
(default)
数据库
如果您的应用不需要多个数据库,请使用 (default)
数据库。
如果您未指定数据库,则 Firestore 客户端库和 Google Cloud CLI 会默认连接到 (default)
数据库。
(default)
数据库。所需的角色
如需创建和管理数据库,您需要拥有 Owner
或 Datastore Owner
Identity and Access Management 角色。这些角色会授予所需的权限。
所需权限
如需管理数据库,您需要以下权限:
- 创建数据库:
datastore.databases.create
- 读取数据库配置:
datastore.databases.getMetadata
- 配置数据库:
datastore.databases.update
- 删除数据库:
datastore.databases.delete
创建数据库
如需创建数据库,请使用以下方法之一:
控制台
-
在 Google Cloud 控制台中,转到数据库页面。
- 点击创建数据库。
- 选择数据库模式。点击继续
- 配置数据库。输入数据库 ID。选择地理位置。 为移动和 Web 客户端选择安全规则。 点击创建数据库。
gcloud
使用 gcloud firestore databases create
命令。
gcloud firestore databases create \ --database=DATABASE_ID \ --location=LOCATION \ --type=DATABASE_TYPE \ [--delete-protection]
替换以下内容:
- DATABASE_ID:有效的数据库 ID。
- LOCATION:Firestore 多区域或区域的名称。
- DATABASE_TYPE:
firestore-native
(针对原生模式)或datastore-mode
(针对 Datastore 模式)。
--delete-protection
是可选标志,用于启用删除保护。启用删除保护时,您无法删除数据库。您必须先停用此设置才能删除。默认情况下,此设置处于停用状态。
Firebase CLI
firebase firestore:databases:create DATABASE_ID \ --location=LOCATION \ [--delete-protection DELETE_PROTECTION_ENABLEMENT]
替换以下内容:
- DATABASE_ID:有效的数据库 ID。
- LOCATION:Firestore 多区域或区域的名称。
- DELETE_PROTECTION_ENABLEMENT:
ENABLED
或DISABLED
。
创建的数据库始终采用 Firestore 原生模式。
--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。
- LOCATION:Firestore 多区域或区域的名称。
- DATABASE_TYPE:
FIRESTORE_NATIVE
(针对原生模式)或DATASTORE_MODE
(针对 Datastore 模式)。 - DELETE_PROTECTION_ENABLEMENT:
DELETE_PROTECTION_ENABLED
或DELETE_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 客户端库会连接到项目中的 (default)
Firestore 数据库。如需创建连接到已命名数据库的客户端,请在实例化客户端时设置数据库 ID。
列出数据库
使用以下方法之一列出您的数据库:
控制台
在 Google Cloud 控制台中,转到数据库页面。
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-mode
(针对 Datastore 模式)。
更新删除保护设置
如需对数据库启用删除保护,请使用带有 --delete-protection
标志的 gcloud firestore databases update
命令。例如:
gcloud
gcloud firestore databases update --database=DATABASE_ID --delete-protection
将 DATABASE_ID 替换为数据库 ID。
如需对数据库停用删除保护,请使用带有 --no-delete-protection
标志的 gcloud firestore databases update
命令。例如:
gcloud
gcloud firestore databases update --database=DATABASE_ID --no-delete-protection
将 DATABASE_ID 替换为数据库 ID。
删除数据库
如需删除数据库,请使用控制台或命令行工具。
如果数据库启用了删除保护设置,则必须先停用删除保护。
如果数据库包含 App Engine 搜索数据或 blob 实体,您必须先删除这类数据。
删除数据库不会自动删除该数据库的任何 Eventarc 触发器。触发器会停止传送事件,但会继续存在,直到您删除触发器。
控制台
gcloud
使用“gcloud firestore databases delete”命令。
gcloud firestore databases delete --database=DATABASE_ID
将 DATABASE_ID 替换为要删除的数据库的 ID。
配置每个数据库的访问权限
您可以使用 Identity and Access Management Conditions 来配置每个数据库级别的访问权限。以下示例使用 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
Firestore 指标在两个受监控的资源下报告。
您可以通过查看 firestore.googleapis.com/Database
在数据库级别检查汇总指标。firestore_instance
下报告的指标在项目级层汇总。
限制
- 每个项目最多可以有 100 个数据库。您可以与支持团队联系,申请提高此限制。
- 如果
(default)
数据库包含任何 GAE 搜索数据,则无法删除该数据库。请使用 index delete api 删除 GAE 搜索数据。如果您最近删除了 GAE 搜索数据,则可能需要等待一段时间才能删除数据库。 - 如果
(default)
数据库包含任何 blob 实体,则无法删除该数据库。请使用 Blobstore delete api 删除 Blobstore 数据。您可以在 Google Cloud 控制台中运行以下 GQL 查询,检查您的(default)
数据库是否有 Blobstore 数据:SELECT * FROM __BlobInfo__
。 - 在删除操作发生后的 5 分钟内,您不能重复使用数据库 ID。
- Cloud Functions v1 不支持 Firestore 已命名数据库。请使用 Cloud Firestore 触发器(第 2 代)为已命名数据库配置事件。
- Firestore 函数触发器 v1 和 Firestore 事件触发器可能会在数据库被删除后停止运行,即使在创建了具有相同名称的新数据库后也不会恢复运行。