本页介绍了如何管理 Spanner 数据库,包括如何创建数据库、修改数据库选项和删除数据库。如需了解如何更新数据库架构,请参阅进行架构更新。
如需练习创建数据库并向其加载示例数据,请参阅“您的第一个数据库”Codelab。
创建数据库
以下示例展示了如何在现有实例中创建数据库。
对于 GoogleSQL 方言数据库,您可以在创建数据库时或创建数据库后定义数据库架构。对于 PostgreSQL 方言数据库,您必须在创建后定义架构。
架构使用数据库定义语言进行定义,有关 GoogleSQL 和 PostgreSQL 的文档中对此有详细说明。如需详细了解如何创建和更新架构,请参阅以下链接:
创建数据库后,您可以通过启用数据库删除保护功能来保护对应用和服务至关重要的数据库。如需了解详情,请参阅防止意外删除数据库。
控制台
在 Google Cloud 控制台中,前往 Spanner 实例页面。
选择要在其中创建数据库的实例。
点击创建数据库。
输入以下值:
- 要在 Google Cloud 控制台中显示的数据库名称。
- 要为此数据库使用的方言。
- 对于 GoogleSQL 方言数据库,您可以选择提供一组用于定义架构的 DDL 语句。使用 DDL 模板预填充常见元素。如果您的 DDL 语句中存在错误, Google Cloud 控制台会在您尝试创建数据库时返回错误。
- (可选)选择要用于此数据库的客户管理的加密密钥。
点击创建以创建数据库。
gcloud
使用 gcloud spanner databases create
命令。
gcloud spanner databases create DATABASE \
--instance=INSTANCE \
[--async] \
[--database-dialect=DATABASE_DIALECT] \
[--ddl=DDL] \
[--ddl-file=DDL_FILE] \
[--kms-key=KMS_KEY : --kms-keyring=KMS_KEYRING --kms-location=KMS_LOCATION --kms-project=KMS_PROJECT] \
[GCLOUD_WIDE_FLAG …]
以下选项为必需:
DATABASE
- 数据库的 ID 或数据库的完全限定标识符。如果指定完全限定的标识符,则可以省略
--instance
标志。 --instance=INSTANCE
- 数据库的 Spanner 实例。
以下选项为可选:
--async
- 会立即返回结果,而无需等待正在进行的操作完成。
--database-dialect=DATABASE_DIALECT
- Spanner 数据库的 SQL 方言。必须为以下各项之一:
POSTGRESQL
、GOOGLE_STANDARD_SQL
。 --ddl=DDL
- 以英文分号分隔的 DDL(数据定义语言)语句,用于在新创建的数据库中运行。如果任何语句中存在错误,系统都不会创建数据库。如果设置了
--ddl_file
,则系统会忽略此标志。PostgreSQL 方言数据库不支持。 --ddl-file=DDL_FILE
- 包含要在新创建的数据库中运行的分号分隔的 DDL(数据定义语言)语句的文件的路径。如果任何语句中存在错误,系统都不会创建数据库。如果设置了
--ddl_file
,系统会忽略--ddl
。PostgreSQL 方言数据库不支持。
如果您要指定在创建数据库时要使用的 Cloud Key Management Service 密钥,请添加以下选项:
--kms-key=KMS_KEY
- 键的 ID 或键的完全限定标识符。
如果指定了此组中的任何其他参数,则必须指定此标志。如果已提供完全限定的标识符,则可以省略其他参数。
--kms-keyring=KMS_KEYRING
- 密钥的 Cloud KMS 密钥环 ID。
--kms-location=KMS_LOCATION
- Google Cloud 中密钥的位置。
--kms-project=KMS_PROJECT
相应密钥的 - Google Cloud 项目 ID。
客户端 (GoogleSQL)
C++
如需了解如何安装和使用 Spanner 客户端库,请参阅 Spanner 客户端库。
如需向 Spanner 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解如何安装和使用 Spanner 客户端库,请参阅 Spanner 客户端库。
如需向 Spanner 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解如何安装和使用 Spanner 客户端库,请参阅 Spanner 客户端库。
如需向 Spanner 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解如何安装和使用 Spanner 客户端库,请参阅 Spanner 客户端库。
如需向 Spanner 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解如何安装和使用 Spanner 客户端库,请参阅 Spanner 客户端库。
如需向 Spanner 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用 Spanner 客户端库,请参阅 Spanner 客户端库。
如需向 Spanner 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需了解如何安装和使用 Spanner 客户端库,请参阅 Spanner 客户端库。
如需向 Spanner 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
更新数据库架构或选项
您可以使用 DDL 语句更新数据库架构和选项。
例如,如需向表中添加列,请使用以下 DDL 语句:
GoogleSQL
ALTER TABLE Songwriters ADD COLUMN Publisher STRING(10);
PostgreSQL
ALTER TABLE Songwriters ADD COLUMN Publisher VARCHAR(10);
如需更新查询优化器版本,请使用以下 DDL 语句:
GoogleSQL
ALTER DATABASE Music SET OPTIONS(optimizer_version=null);
PostgreSQL
ALTER DATABASE DB-NAME SET spanner.optimizer_version TO DEFAULT;
如需详细了解受支持的选项,请参阅 GoogleSQL 或 PostgreSQL 的 ALTER DATABASE
DDL 参考文档。
如需了解架构更新,请参阅进行架构更新。
控制台
前往 Google Cloud 控制台中的实例页面。
选择包含要修改的数据库的实例。
选择数据库。
点击 Spanner Studio。
点击
新建标签页或使用空白编辑器标签页。然后,输入要应用的 DDL 语句。点击运行以应用更新。如果 DDL 中存在错误, Google Cloud 控制台会返回错误,并且数据库不会发生更改。
gcloud
如需使用 gcloud
命令行工具更改数据库,请使用 gcloud spanner databases ddl update
。
gcloud spanner databases ddl update \ (DATABASE : --instance=INSTANCE) \ [--async] \ [--ddl=DDL] \ [--ddl-file=DDL_FILE] \
如需详细了解可用选项,请参阅 gcloud
参考文档。
使用 --ddl
标志或 --ddl-file
标志将数据库更新传递给命令。如果指定了 DDL 文件,则系统会忽略 --ddl
标志。
如需了解要添加的 DDL 语句,请参阅 GoogleSQL 或 PostgreSQL 的 ALTER DATABASE
DDL 参考文档。
DDL
如需了解详情,请参阅 GoogleSQL 或 PostgreSQL 的 ALTER DATABASE
DDL 参考文档。
检查架构更新操作的进度
控制台
在 Spanner 导航菜单中,选择操作标签页。操作页面会显示当前正在运行的操作的列表。
在列表中找到架构操作。如果仍在运行,结束时间列中的进度条会显示操作完成百分比,如下图所示:
gcloud
使用 gcloud spanner operations describe
检查操作的进度。
获取操作 ID:
gcloud spanner operations list --instance=INSTANCE-NAME \ --database=DATABASE-NAME --type=DATABASE_UPDATE_DDL
替换以下内容:
- 将 INSTANCE-NAME 替换为 Spanner 实例名称。
- 将 DATABASE-NAME 替换为数据库的名称。
运行
gcloud spanner operations describe
:gcloud spanner operations describe OPERATION_ID\ --instance=INSTANCE-NAME \ --database=DATABASE-NAME
替换以下内容:
- OPERATION-ID:您要检查的操作的操作 ID。
- INSTANCE-NAME:Spanner 实例名称。
- DATABASE-NAME:Spanner 数据库名称。
输出中的
progress
部分显示操作完成百分比。输出类似于以下内容:done: true metadata: ... progress: - endTime: '2022-03-01T00:28:06.691403Z' progressPercent: 100 startTime: '2022-03-01T00:28:04.221401Z' - endTime: '2022-03-01T00:28:17.624588Z' startTime: '2022-03-01T00:28:06.691403Z' progressPercent: 100 ...
REST v1
获取操作 ID:
gcloud spanner operations list --instance=INSTANCE-NAME \ --database=DATABASE-NAME --type=DATABASE_UPDATE_DDL
替换以下内容:
- 将 INSTANCE-NAME 替换为 Spanner 实例名称。
- DATABASE-NAME 替换为数据库名称。
查看操作的进度。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT-ID:项目 ID。
- INSTANCE-ID:实例 ID。
- DATABASE-ID:数据库 ID。
- OPERATION-ID:操作 ID。
HTTP 方法和网址:
GET https://spanner.googleapis.com/v1/projects/PROJECT-ID/instances/INSTANCE-ID/databases/DATABASE-ID/operations/OPERATION-ID
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ ... "progress": [ { "progressPercent": 100, "startTime": "2023-05-27T00:52:27.366688Z", "endTime": "2023-05-27T00:52:30.184845Z" }, { "progressPercent": 100, "startTime": "2023-05-27T00:52:30.184845Z", "endTime": "2023-05-27T00:52:40.750959Z" } ], ... "done": true, "response": { "@type": "type.googleapis.com/google.protobuf.Empty" } }
如果操作花费的时间过长,您可以取消操作。如需了解详情,请参阅取消长时间运行的数据库操作。
删除数据库
删除数据库将会永久移除该数据库及其所有数据。数据库删除操作无法撤消。如果数据库启用了数据库删除保护,则您必须先停用其删除保护,然后才能删除该数据库。
删除数据库时,现有备份不会被删除。如需了解详情,请参阅备份和恢复。
控制台
前往 Google Cloud 控制台中的实例页面。
选择包含要删除的数据库的实例。
选择数据库。
点击删除数据库。系统随即会显示一条确认消息。
输入数据库名称,然后点击删除。
gcloud
如需使用 gcloud
命令行工具删除数据库,请使用 gcloud spanner databases delete
。
gcloud spanner databases delete \ (DATABASE : --instance=INSTANCE)
以下选项为必需:
DATABASE
- 数据库的 ID 或数据库的完全限定标识符。如果提供完全限定的标识符,则应省略
--instance
标志。 --instance=INSTANCE
- 数据库的 Spanner 实例。
如需了解详情,请参阅 gcloud
参考文档。
DDL
DDL 不支持数据库删除语法。
后续步骤
- 创建数据库并向其中加载示例数据。
- 详细了解 GoogleSQL DDL 参考文档。
- 详细了解 PostgreSQL DDL 参考文档。
- 了解如何备份和恢复数据库。
- 了解如何防止意外删除数据库。
- 了解如何进行架构更新。