PostgreSQL 正则新武器实测:pg_tre 与 pg_re2
来源: depesz.com — 2026-08-25
概述
Depesz 在他 33GB、160 万行的 explain.depesz.com 执行计划库上,实测了 PostgreSQL 生态里两个新增的正则扩展。基准是用内置正则做全表扫描匹配字符串“sususu”,耗时约 40 秒。经典方案 pg_trgm 用 GIN 索引后只需约 1.6 秒,但建索引就要 16 分钟且占 1.7GB。pg_tre 号称“近似正则索引”,建索引却耗时 7 个多小时、占 21GB,且不支持 lookbehind 这类复杂断言,但内置了基于 Levenshtein 距离的模糊匹配,能先模糊召回再交给 trigram 精确过滤,形成很实用的两级方案。pg_re2 则基于 Google 的 RE2 库,不支持 lookbehind(为换速度而移除),建索引只要 15 分钟、占 2.9GB,简单正则查询约 0.96 秒,比 trigram 更快,复杂查询也几乎砍半耗时。作者总结这些新东西已初见成效,有些则更像对未来的许诺。
核心要点
内置正则全表扫描匹配 160 万行、33GB 数据耗时约 40 秒,这是所有方案的基准线
pg_trgm 用 GIN 索引能把同类查询压到约 1.6 秒,但建索引要 16 分钟、占 1.7GB
pg_tre 建索引竟耗时 7 个多小时、占 21GB,不支持 lookbehind,却内置基于 Levenshtein 距离的模糊匹配
pg_re2 基于 Google RE2,建索引 15 分钟、占 2.9GB,简单正则约 0.96 秒,比 trigram 更快
作者演示了用 pg_tre 模糊召回、再交给 trigram 索引精确过滤的两级组合方案,效果不错但仍有不少毛边
金句
All things said – there is some interesting work related to regular expressions in PostgreSQL. Some of it already provides great results. Some of it looks more like a promise for a bright future.(PostgreSQL 正则方向确有一些有意思的工作——部分已经给出漂亮的成果,部分则更像是对光明未来的许诺。)
👍 0
点赞
👎 0
沉底
返回 Lobsters 首页