适用于 Spanner 的 PostgreSQL 接口

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

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

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

管理员可使用 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 语言支持,请参阅 Spanner 中的 PostgreSQL 语言

PostgreSQL 客户端支持

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

PostgreSQL 页面还支持 psql 命令行工具。psql 是一个交互式环境,可用于运行查询、探索元数据和加载数据,这在许多 PostgreSQL 环境中都很常见。PGAdapter 支持 psql。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,另一种为 ANSI 2001,另一种为另一种是开源 PostgreSQL 实际标准)来表达 Spanner 功能,并添加了扩展程序以支持交错表和查询提示等 Spanner 功能。
  • 对于这两者,您都使用 Spanner 管理界面:Google Cloud 控制台、gcloud CLI 和 Spanner 客户端库,以实现 DevOps 自动化。
  • 对于这两者,您都使用 Spanner 应用开发接口:Spanner 客户端库、REST API 和 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 控制台的 Spanner Studio 页面。

后续步骤