pg_tre 1.1.1:PostgreSQL 18+ 的近似正規表示式索引,三層過濾降至毫秒以下
PostgreSQL.org · 2026-05-22
pg_tre 1.1.1 是首個公開發布版本,為 PostgreSQL 18+ 實作原生的索引存取方法(IndexAmRoutine),支援帶 Levenshtein 編輯距離預算的近似正規表示式(approximate regex)匹配,可在數百萬筆資料中以毫秒以下的時間找到「至多 N 個字元與正規表示式不符」的欄位值。
三層過濾架構
pg_tre 的索引以三層漏斗逐步縮小候選集,最後再回表驗證:
- BRIN 式範圍 Bloom filter:粗粒度過濾,排除整個 block 的不匹配區段
- 稀疏圖 trigram 倒排索引(sparsemap trigram postings):字元三元組層級過濾
- Per-tuple Bloom filter:細粒度過濾,減少回表次數
- Heap recheck:以 Ville Laurikari 的 TRE 函式庫執行完整正規表示式驗證
UTF-8 codepoint trigram 原生支援 CJK、emoji 與重音字元,不需額外設定。
使用語法
-- 允許「timeout」或「connection」各有最多 1 個字元誤差的日誌搜尋
SELECT id, body FROM logs
WHERE body %~~ tre_pattern('(timeout){~1}.*(connection){~1}', 1);
-- 建立索引(需 shared_preload_libraries = 'pg_tre')
CREATE INDEX ON logs USING tre (body);其中 %~~ 是 pg_tre 的近似匹配運算子,{~N} 語法設定子表示式的編輯距離預算。
適用場景與定位
pg_tre 設計為與 pg_trgm、PostgreSQL FTS、pgvector 互補,而非取代。最適合的場景包含:
- OCR 輸出的錯字容忍搜尋
- SKU / 料號的拼寫誤差查詢(如
AB-9?[0-9]{4}) - 混合語義搜尋(pgvector)與模糊詞彙過濾(pg_tre)的混合 RAG pipeline
- 原始碼的近似重複偵測
DoS 防護方面,pg_tre 提供可設定的 NFA 狀態上限與執行時間上限,防止複雜正規表示式造成資料庫卡死。索引支援 WAL、crash recovery、串流複製與 REINDEX CONCURRENTLY,行為與標準 PostgreSQL 索引一致。
原始來源:PostgreSQL 官方新聞
pg_infer 1.0.0:讓 Transformer 模型內部知識成為可查詢的 SQL 關聯
PostgreSQL.org · 2026-05-22
pg_infer 1.0.0 是 PostgreSQL 18+ 的擴充套件,將 Transformer 模型的 gate activations、feature labels 與 embedding 儲存為 WAL 記錄的 vindex(vectorized index),讓模型內部知識成為查詢計劃器可以掃描、篩選、與一般表格 join 的資料來源。不同於 pgvector 存放使用者自行計算的向量,pg_infer 存放的是模型在推理時「學到了什麼」。
核心 SQL 介面
| 函式 / 運算子 | 語意 | 範例 |
|---|---|---|
describe(entity) | 回傳模型關於某實體的已知關聯 | SELECT relation, target, confidence FROM describe('France') |
implies(a, b) | 測試概念 a 是否暗示概念 b | SELECT implies('Paris', 'France') |
<~> | 模型語意相似度,可建立索引 | ORDER BY title <~> 'neural architecture search' |
walk(prompt) | 回傳每層的特徵激活 | 用於 model interpretability |
儲存機制與部署模式
模型知識以 vindex 格式儲存在 PostgreSQL 的 8KB pages 中,完整支援備份、串流複製與時間點還原。支援兩種存儲模式:
- model 模式:整個 vindex 以 WAL 記錄方式存入 PostgreSQL,backup 與複製行為與一般表格相同
- column 模式:將 vindex 附加到文字欄位,啟用
ORDER BY <~>的模型語意排序
遠端部署(larql-server)可讓 vindex 執行於閒置的 replica,透過 HTTP/2 或 Unix socket 回應查詢,每台主機共享一份模型副本,並支援 pg_cancel_backend() 在 100ms 內取消推理。
支援模型與使用前提
pg_infer 1.0.0 原生支援 BitNet b1.58(ternary weight transformer,可在 CPU 上低功耗執行),以及常見的 full-precision 模型;使用 OpenBLAS 與 f16 lazy decode 優化 CPU 效能。需 PostgreSQL 18+,vindex 生成需離線先執行 LARQL 工具鏈處理模型權重。
原始來源:PostgreSQL 官方新聞