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