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

pg_builder 2.0.0 和 pg_wrapper 2.0.0 PHP 包发布

发布于 2022-01-02, 作者 Alexey Borzov
相关开源项目

我很高兴地宣布 pg_builderpg_wrapper 包的新版本发布。本次发布的主要内容是支持 Postgres 14 和 PHP 8.1

pg_builder 版本 2.0.0

pg_builder 是一个用于 Postgres 的查询构建器,其后端部分是 PostgreSQL 自身 SQL 解析器的 PHP 实现。它支持 Postgres 14 中几乎所有的 SELECT (和 VALUES)、INSERTUPDATEDELETE 查询语法。

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

发行亮点

  • 支持 Postgres 14 的新语法:大多数关键字可以在不使用 AS 的情况下用作列别名;GROUP BYDISTINCT 子句;公共表表达式的 SEARCHCYCLE 子句;JOIN 表达式的 USING 子句的别名。
  • 带有自定义参数格式的 SQL 函数(参数由关键字分隔,关键字作为参数等)现在会被解析为专门的 Node,并在生成的 SQL 中保留其在源代码中的形式:例如 trim(trailing 'o' from 'foo') 而不是 pg_catalog.rtrim('foo', 'o')。这遵循了 Postgres 14 本身的更改。
  • 在 PHP 8.1 下运行时没有 E_DEPRECATED 错误

完整发行说明

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

$ composer require sad_spirit/pg_builder

pg_builder 可以独立使用,与 pg_wrapper 一起使用则允许在运行构建的查询时,将查询参数透明地转换为 Postgres 类型。

pg_wrapper 版本 2.0.0

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

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

发行亮点

  • 完全支持 Postgres 14 中新增的 multirange 类型,使用 PHP 端的 types\Multirange 及其派生类来表示值,并使用 converters\containers\MultiRangeConverter 在数据库字符串表示形式和 PHP 值之间进行转换。
  • 支持 PHP 8.1 中对 pgsql 扩展所做的更改:连接和查询结果使用对象而不是资源。

完整发行说明

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

$ composer require sad_spirit/pg_wrapper