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

pg_builder 和 pg_wrapper 3.0 发布,支持 Postgres 17 语法

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

很高兴宣布 pg_builderpg_wrapper 包已更新,以支持 Postgres 17 语法。

pg_builder 3.0

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

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

发行亮点

  • 支持 Postgres 17 的新语法
    • MERGE 语句的改进:支持 RETURNING 子句,支持 WHEN NOT MATCHED BY SOURCE 操作,可以在 WITH 中使用;
    • 新的 SQL/JSON 构造:json(), json_scalar(), json_serialize(), json_exists(), json_query(), json_value(), json_table()
  • 软件包手册已重写并发布在 pg-builder.readthedocs.io
  • 现在需要 PHP 8.2+ 和 Postgres 12+,已在 PHP 8.4 和 Postgres 17 上测试

完整发行说明

该软件包可以从 GitHub 下载 或使用 Composer 安装

$ composer require sad_spirit/pg_builder

pg_wrapper 3.0

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

对于存在对应原生 PHP 类型或类的类型,将使用它们(text -> string, timestamp -> DateTimeImmutable, hstore -> 关联数组等)。对于其他类型(几何类型、范围类型),该包提供了自定义类。如果基本类型可以转换,那么复合类型、数组和使用这些类型的范围类型也可以处理。

发行亮点

  • 查询结果的新迭代器方法;
  • 可以使用 PSR-3 logger 来记录已执行的查询;
  • Postgres ENUM 类型和 PHP 的字符串枚举之间的转换器;
  • 软件包手册已重写并发布在 pg-wrapper.readthedocs.io
  • 现在需要 PHP 8.2+ 和 Postgres 12+,已在 PHP 8.4 和 Postgres 17 上测试。

完整发行说明

该软件包可以从 GitHub 下载 或使用 composer 安装

$ composer require sad_spirit/pg_wrapper