PostgreSQL 页面

本页面介绍了 Cloud Spanner 的 PostgreSQL 页面及其组件。它提供了有关如何在 PostgreSQL 和 GoogleSQL 之间进行选择的指南,并提供了有关采用和使用 PostgreSQL 页面的最佳实践。

借助 PostgreSQL 页面,Spanner 具备全代管式、无限扩缩、强一致性、高性能以及高达 99.999% 的全球可用性,可以从开源 PostgreSQL 生态系统访问 Spanner 的功能。它包含 PostgreSQL SQL 方言的核心部分,支持 psql 命令行工具、原生语言客户端,并可集成到 Dataflow 等现有 Google 工具中。不同于管理实际 PostgreSQL 数据库实例的其他服务,Spanner 使用与 PostgreSQL 兼容的语法来公开其现有的横向扩容功能。这可让开发者熟悉这一点,并使应用具有可移植性,但并非 100% 兼容 PostgreSQL。依赖 PostgreSQL 功能(如存储过程、触发器、扩展程序或可配置的隔离级别)的现有应用将需要返工才能在 Spanner 上运行。但是,Spanner 支持的 SQL 语法在语义上等效的 PostgreSQL,这意味着针对 PostgreSQL 页面编写的架构和查询可以轻松地移植到其他 PostgreSQL 环境。

PostgreSQL 页面支持常见的 PostgreSQL SQL 语法,包括查询、函数和运算符。此外,它还支持许多数据类型、DDL 语法和信息架构视图。应用可以使用原生 Spanner 客户端或 PGAdapter(实现开放式 PostgreSQL 线路协议的轻量级代理)连接到支持 PostgreSQL 页面的 Spanner 数据库。最初,有线协议支持主要用于 psql 命令行工具。

管理员可以使用 Spanner 的现有控制台、API 和工具(如 gcloud CLI)来预配、管理和监控支持 PostgreSQL 页面的数据库。PostgreSQL 页面是在创建时按数据库配置的。Spanner 实例可以同时包含 GoogleSQL 和 PostgreSQL 页面方言数据库。由于这两种数据库语言共用相同的底层分布式数据库引擎,因此它们具有相同的可伸缩性、一致性、性能和安全特征。

PostgreSQL 页面的组件

PostgreSQL 界面包含两项主要功能:支持 PostgreSQL SQL 方言,以及支持客户端连接到启用了 PostgreSQL 页面的数据库。

PostgreSQL SQL 方言支持

PostgreSQL 页面提供一部分 PostgreSQL SQL 方言,包括 DQL、DML 和 DDL,以及支持 Spanner 功能(例如交错表和查询提示)的扩展程序。如需详细了解 Spanner 的 PostgreSQL 语言支持,请参阅 Cloud Spanner 中的 PostgreSQL 语言

PostgreSQL 客户端支持

开发者可以使用 Java、Go、Python、Node.js、Ruby、PHP、C# 和 C++ 环境的开源 Spanner 客户端将其应用连接到 PostgreSQL 页面数据库。他们还可以使用开源 Spanner JDBC 驱动程序Go 的 database/sql 软件包的驱动程序

PostgreSQL 页面还支持 psql 命令行工具。psql 是一个交互式环境,可用于运行查询、探索元数据和加载数据,在许多 PostgreSQL 环境中都很常见。psql 支持由 PGAdapter 提供支持。PGAdapter 是一个轻量级代理,可将 PostgreSQL 有线协议转换为 Spanner 的原生 gRPC 接口,为您管理连接和 IAM 身份验证。如需了解详情,请参阅关于 PGAdapter

PGAdapter 也支持 PostgreSQL JDBC 驱动程序PostgreSQL pgx 驱动程序。如需查看受支持的 PostgreSQL 驱动程序的完整列表,请参阅 PostgreSQL 驱动程序和 ORM

在 GoogleSQL 或 PostgreSQL 之间进行选择

创建 Spanner 数据库时,您可以选择 GoogleSQL 和 PostgreSQL 方言。方言决定了应用使用的查询和数据类型的语法和语义,以及它们与数据库的连接方式。

为给定应用或项目选择使用 GoogleSQL 或 PostgreSQL 的决定性因素应该是业务需求和目标,而不是 Spanner 功能的 SQL 语言支持。SQL 语言方言在 Spanner 功能方面具有相同特征的对等方:

  • 两者基于相同的分布式存储和查询处理基础实现。因此,它们具有相同的性能、可扩缩性、一致性和可用性特征。
  • 两者都通过各自的标准语言结构的子集(其中一种是 ANSI 2001,另一种是开源 PostgreSQL 标准)来表达 Spanner 数据库功能,并且添加了扩展程序来支持交错表和查询提示等 Spanner 功能。
  • 对于两者,您都可以使用 Spanner 管理界面:Google Cloud 控制台、gcloud CLI 和可实现 DevOps 自动化的 Spanner 客户端库。
  • 对于两者,均使用 Spanner 应用开发接口:Spanner 客户端库、REST 和 RPC API。
  • 对于这两者,您都可以使用 Spanner INFORMATION_SCHEMASPANNER_SYS 系统架构来查询数据库元数据和统计信息。

当前的 PostgreSQL 页面版本尚未在 GoogleSQL 和 PostgreSQL 方言之间实现完全对等。但从长远来看,您应按如下方式确定是为给定应用或项目使用 PostgreSQL 还是 GoogleSQL:

  • 如果开发团队熟悉开源 PostgreSQL 生态系统,或者您的组织已经或正在对 PostgreSQL 的使用进行标准化,请选择 PostgreSQL。

  • 选择 GoogleSQL:

    • 如果开发团队熟悉 GoogleSQL,无论是过去的 Spanner 经验,还是使用同样支持 GoogleSQL 的其他 Google Cloud 数据库(如 BigQuery)。
    • 如果您的组织在使用 GoogleSQL 或其底层 ANSI 2011 标准方面实现了标准化。

如需了解详情,请参阅 GoogleSQL 和 PostgreSQL 之间的方言对等

使用 PostgreSQL 页面的最佳做法

为了有效地使用 PostgreSQL 页面,Google 建议您:

  • 使用 Google Cloud 控制台或 Google Cloud CLI 在 Spanner 实例中创建 PostgreSQL 数据库。(您可以在同一实例中同时创建 PostgreSQL 和 GoogleSQL 数据库。)

  • 使用 Spanner 客户端库连接访问数据库的应用。

  • 通过 PGAdapter 代理使用 psql 命令行工具,以交互方式处理数据库。或者,您也可以使用 Google Cloud 控制台的编写 DDL查询页面。

后续步骤