适用于 Spanner 的 PostgreSQL 接口

本页面介绍了 Spanner 的 PostgreSQL 页面及其组件。它 提供了有关如何在 PostgreSQL 和 GoogleSQL,并提供了有关采用和使用 PostgreSQL 页面。

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

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

管理员预配、管理和监控 启用 PostgreSQL 页面的数据库, Spanner 现有的控制台、API 和工具,例如 gcloud CLI。 PostgreSQL 页面在创建时按数据库配置 。Spanner 实例可以同时包含 GoogleSQL 和 PostgreSQL 页面方言数据库。因为它们共享 相同的底层分布式数据库引擎,但两种数据库方言都具有 它们具备相同的可伸缩性、一致性、性能和安全特性。

PostgreSQL 页面的组件

PostgreSQL 页面包含两个主要功能: 支持 PostgreSQL SQL 方言,并为客户端提供支持 连接到已启用 PostgreSQL 页面的数据库。

PostgreSQL SQL 方言支持

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

PostgreSQL 客户端支持

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

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

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

在 GoogleSQL 和 PostgreSQL 之间进行选择

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

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

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

当前的 PostgreSQL 页面尚未完全实现 GoogleSQL 和 PostgreSQL 方言的对等性。 但从长远来看,您应确定是使用 PostgreSQL 还是 用于给定应用或项目的 GoogleSQL,如下所示:

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

  • 选择 GoogleSQL:

    • 如果开发团队熟悉 GoogleSQL, Spanner 经验,或者与其他 Google Cloud 团队 BigQuery 等同样支持 GoogleSQL 的数据库。
    • 如果您的组织正在统一使用 GoogleSQL 或其底层 ANSI 2011 标准。

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

使用 PostgreSQL 页面的最佳做法

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

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

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

  • 通过 PGAdapter 代理使用 psql 命令行工具来工作 与您的数据库交互。或者,您也可以使用 Google Cloud 控制台 Spanner Studio 页面。

后续步骤