2025年9月25日: PostgreSQL 18 发布!

pg_builder 和 pg_wrapper 2.3.0 发布,支持 Postgres 16 语法

发布于 2023-09-21,作者 Alexey Borzov
相关开源项目

我很高兴地宣布 pg_builderpg_wrapper PHP 包已更新以支持 Postgres 16 语法,同时还发布了 pg_gateway 的初始版本。

pg_builder 2.3.0

pg_builder 是一个 Postgres 的查询构建器,它依赖于 PostgreSQL 自身 SQL 解析器的部分 PHP 重写。它支持 Postgres 16 中几乎所有可用的 SELECT(和 VALUES)、INSERTUPDATEDELETEMERGE 查询语法。

使用 pg_builder,可以从手动编写的查询开始,将其解析成抽象语法树(Abstract Syntax Tree),然后向该树添加查询部分(可以是 Node 对象或字符串),或者从中移除它们,最后将树转换回 SQL 字符串。

新版本增加了对 PostgreSQL 16 中新增功能的支持

  • SQL/JSON 函数和表达式:IS JSON 断言,聚合函数 json_arrayagg()json_objectagg(),构造函数 json_array()json_object()
  • 非十进制整数文字以及数字文字中的下划线作为分隔符。
  • FROM 子句中的子查询可选别名,新增了 SYSTEM_USER 服务器变量,XMLSERIALIZE() 表达式的 [NO] INDENT 选项。

完整发行说明

该包可以从 Github 下载 或使用 Composer 安装。

$ composer require sad_spirit/pg_builder

pg_wrapper 2.3.0

pg_wrapper 提供了 PostgreSQL 数据类型的转换器,以及一个围绕 PHP 原生 pgsql 扩展的面向对象的封装,该封装使用了这些转换器。查询结果字段的转换是自动完成的,利用数据库元数据;查询参数可能需要指定类型。

对于有对应原生 PHP 类型或类的类型,将使用它们(text -> string,timestamp -> DateTimeImmutable,hstore -> 关联数组等)。对于其他类型(几何类型、范围类型),该包提供了自定义类。

新版本增加了对 PostgreSQL 16 中新增功能的支持

  • 当连接到 Postgres 16+ 时,数字类型转换器将接受非十进制整数文字以及带有下划线作为数字分隔符的数字文字,允许将它们用作查询参数值。

完整发行说明

该包可以从 Github 下载 或使用 Composer 安装。

$ composer require sad_spirit/pg_wrapper

pg_gateway 0.1.0

这是基于 pg_wrapper 和 pg_builder 包构建的 Table Data Gateway 实现。它增加了以下功能:

  • Gateway 了解表元数据,并包含创建常用条件等方法的辅助函数,
  • 有机制可以缓存完整的查询,以跳过解析/构建过程,
  • 可以通过一个 Gateway 创建查询,并将其连接到另一个 Gateway 构建的查询。

像往常一样,该包可以从 Github 下载 或使用 Composer 安装。

$ composer require sad_spirit/pg_gateway