PostgreSQL 接口

借助适用于 Spanner 的 PostgreSQL 接口,您可以使用熟悉的 PostgreSQL 工具和语法来利用 Spanner 的全托管式、可扩缩且高度可用的基础设施。本页面可帮助您了解 PostgreSQL 接口的功能和限制。

PostgreSQL 接口的优势

  • 可移植性:PostgreSQL 接口使用与开源 PostgreSQL 兼容的架构、查询和客户端,提供对各种 Spanner 功能的访问权限。因此,将基于 Spanner 构建的应用迁移到其他 PostgreSQL 环境就变得十分简单。这种可移植性可提供部署灵活性,并支持灾难恢复场景,例如被迫退出。
  • 熟悉程度:如果您已使用 PostgreSQL,则可以使用许多相同的 PostgreSQL 语句和工具快速开始使用 Spanner。在整个数据库产品组合中使用 PostgreSQL 意味着特定产品之间的差异更少,并且有一套通用的最佳实践。
  • 不妥协地使用 Spanner:由于 PostgreSQL 接口是基于 Spanner 现有基础构建的,因此它可以提供 Spanner 现有的所有可用性、一致性和性价比优势,而无需在互补的 GoogleSQL 生态系统中牺牲任何可用功能。

Spanner 中不支持的 PostgreSQL 功能

请务必了解,PostgreSQL 接口通过与 PostgreSQL 兼容的架构、类型、查询和客户端来提供 Spanner 的功能。它并不支持 PostgreSQL 的所有功能。将现有 PostgreSQL 应用迁移到 Spanner,即便使用 Spanner 的 PostgreSQL 接口,也可能需要进行一些改造,以适应不受支持的 PostgreSQL 功能或行为差异,例如查询优化或主键设计。不过,迁移完成后,工作负载便可充分利用 Spanner 的可靠性和独特的多模型功能。

下表列出了支持和不支持的 PostgreSQL 功能的详细信息:

  • 支持的 PostgreSQL 功能:PostgreSQL 接口支持许多最常用的 PostgreSQL 功能。包括架构和类型系统的核心部分、许多常见的查询形状、各种函数和运算符,以及 PostgreSQL 系统目录的关键方面。应用可以通过 Spanner 实现的 PostgreSQL 传输协议进行连接,从而使用多个 PostgreSQL 客户端。
  • 不支持的某些 PostgreSQL 语言功能:不支持扩展程序、用户定义的数据类型、用户定义的存储过程和其他功能。如需查看完整列表,请参阅 Spanner 中的 PostgreSQL 语言。此外,PostgreSQL 中还有一些功能的行为与开源 PostgreSQL 不同。如需了解详情,请参阅适用于 Spanner 的 PostgreSQL 接口中的已知问题
  • Spanner 和 Spanner 控制平面:具有 PostgreSQL 接口的数据库使用 Spanner 和 Google Cloud工具来预配、保护、监控和优化实例。Spanner 不支持使用 pgAdmin 等工具来执行管理活动。
  • 客户端和传输协议支持:Spanner 使用 PGAdapter(与您的应用一起运行的轻量级代理)支持 PostgreSQL 传输协议的核心查询功能。这使许多 Spanner 客户端可以正常使用 Spanner PostgreSQL 接口数据库,同时利用 Spanner 的全局端点和连接管理以及 IAM 身份验证。Google 的内部基准测试结果显示,与直接连接到 Spanner 的内置端点相比,PGAdapter 不会增加任何明显的额外延迟时间。

行政和管理

PostgreSQL 接口支持通过以下功能来控制和管理 Spanner 数据库:

  • 统一体验:使用 Spanner 的现有控制台、API 和工具(如 Google Cloud CLI)预配、管理和监控启用了 PostgreSQL 接口的数据库。
  • 灵活配置:在创建时按数据库配置 PostgreSQL 接口。单个 Spanner 实例可以同时容纳 GoogleSQL 和 PostgreSQL 接口数据库。
  • 共同优势:这两种数据库方言共享相同的底层分布式数据库引擎,可确保一致的可伸缩性、一致性、性能和安全性。

功能

Spanner 的 PostgreSQL 接口提供两项主要功能来实现与 PostgreSQL 生态系统的集成:

  • PostgreSQL 方言支持

    Spanner 提供了一部分 PostgreSQL SQL 方言,包括数据查询语言 (DQL)、数据操纵语言 (DML) 和数据定义语言 (DDL)。此外,它还包含一些扩展,可支持 Spanner 特有的功能,例如交错表存留时间 (TTL)查询提示

    如需详细了解支持的 PostgreSQL 语言元素,请参阅 Spanner 中的 PostgreSQL 语言。如需了解如何将 Spanner 功能与 PostgreSQL 方言搭配使用,请参阅相应功能的文档。

  • PostgreSQL 客户端支持

    借助 Spanner,您可以通过各种客户端连接到数据库:

    • PostgreSQL 生态系统工具:您可以使用熟悉的工具(例如 PostgreSQL JDBC 驱动程序PostgreSQL pgx 驱动程序)将应用连接到 PostgreSQL 接口数据库。如需查看受支持的驱动程序、ORM 和工具的列表,请参阅 PostgreSQL 驱动程序和 ORM

    • psql 命令行工具:支持常用的 psql 交互式环境,让您能够直接从终端运行查询、探索元数据和加载数据。

    • PGAdapter:此轻量级代理可简化连接管理和身份验证。如需了解详情,请参阅 PGAdapter 概览

    • Spanner 客户端:Spanner 为各种编程语言(Java、Go、Python、Node.js、Ruby、PHP、C#、C++)提供了开源 Spanner 客户端,以及 Spanner JDBC 驱动程序Go 的 SQL 软件包的驱动程序。Spanner 客户端直接连接到 Spanner 的全球端点,无需使用代理。但是,Spanner 客户端与现有的 PostgreSQL 客户端、ORM 或工具不兼容。

使用 PostgreSQL 接口的最佳实践

使用 PostgreSQL 接口时,请遵循以下最佳实践:

  1. 连接应用:使用一组受支持的 PostgreSQL 工具实现高效连接。
  2. 与数据库交互:对于交互式工作,请选择以下选项之一:

后续步骤