ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

pgroonga 配合生成列 + B-tree zhparser 选那个版本的 pgsql 比较好 安装扩展比较容易 - 孙龙

2026/8/16 12:31:43 拓冰建站 浏览量
pgroonga 配合生成列 + B-tree zhparser 选那个版本的 pgsql 比较好 安装扩展比较容易 - 孙龙

pgroonga 配合生成列 + B-tree zhparser 选那个版本的 pgsql 比较好 安装扩展比较容易

结论先行(兼顾:pgroonga + zhparser + B-tree + 生成列 + 安装最简单、坑最少)

首选推荐:PostgreSQL 15

备选:PostgreSQL 14

不优先选:16/17/18(zhparser 编译容易踩新编译器坑)

坚决避开:12 及更早(生命周期快结束,不推荐上新项目)

下面逐条拆解理由:

一、核心条件对齐梳理

  1. 生成列 GENERATED ALWAYS AS STORED
     
    PG12 开始支持;14/15/16 功能稳定无重大 bug,18 才支持虚拟生成列(你场景一般用 STORED,不需要追)。
  2. PGroonga
     
    官方提供预编译包:14/15/16/17/18 都有 yum/apt 二进制包;
     
    PG15 社区实践量最大,各类文档、问题案例最多。
  3. zhparser(amutu 原版,SCWS 分词)
    关键点:PG >=16 编译极易触发 -no-opaque-pointers 编译报错
     
    PG14 / PG15:直接 make && make install,绝大多数环境一次编译成功,几乎不用修改编译参数;
     
    PG16+:gcc 新版本开启 opaque 指针,必须手动修改 pgxs Makefile 才能编译 zhparser,新手很容易卡很久。
     
    zhparser 没有官方 rpm/deb 包,几乎都要源码编译,编译难易度是选型第一门槛
  4. B-tree 索引
     
    14/15 B-tree 持续优化,稳定性一致,无版本差异。

二、三个候选版本横向对比

✅ PG15【最优平衡点|强烈推荐】

  • PGroonga:官方预编译包完善,yum/apt 一键安装,不需要自行编译 groonga
  • zhparser:源码编译最顺滑,极少出现编译器兼容问题
  • 生成列:成熟稳定,社区大量生产案例
  • 生命周期:支持到 2027-11,长期可用
  • 生态:国内教程、排错资料极多
适合:物理机、docker、自建服务器,追求省心少折腾

✅ PG14【稳妥保守备选】

  • zhparser 编译同样顺畅;pgroonga 二进制包齐全
  • 短板:支持截止 2026-11,新项目不建议长期作为首选,短期过渡没问题

⚠️ PG16 / PG17(能跑,但安装成本上升)

  • PGroonga 没问题;
  • zhparser 最大痛点:默认编译失败,需要修改 pgxs 移除 -no-opaque-pointers
  • 如果你不想折腾 C 编译配置,不选。

⚠️ PG18

PGroonga 新版支持,但 zhparser 适配案例极少,属于尝鲜版本,生产不推荐。

三、重要实践提醒(你这套组合常见踩坑点)

  1. 生成列 + pgroonga 索引
     
    ✅ 可以直接在STORED 生成列上建立 USING pgroonga 索引;
     
    ❌ PG17 及以前不能直接用虚拟生成列(PG18 才有 VIRTUAL);
     
    -- 可行示例
    content_tsvector text GENERATED ALWAYS AS (content) STORED;
    CREATE INDEX idx_content_pgroonga ON tbl USING pgroonga(content_tsvector);
    1. 区分两条路线,不要混淆
      • 路线 A:pgroonga 独立全文检索(不需要 zhparser)
      • 路线 B:PG 原生 tsvector + zhparser 分词(搭配 B-tree、gin)
         
        你同时提到 pgroonga + zhparser,确认需求:
      • 如果只用 pgroonga 中文搜索:不需要 zhparser,pgroonga 自带中文分词;
      • zhparser 一般用于 PostgreSQL 内置 tsvector 全文检索。
    很多人混用:一张表同时 pgroonga 索引(高性能模糊 / 全文)+ gin (zhparser tsvector),看业务检索场景。
    1. 安装策略建议(Linux pgdg 源)
       
      优先使用 PGDG 官方源安装 postgres + 官方 pgroonga 包,不要全部源码编译:
    # ubuntu/debian示例 pg15
    apt install postgresql-15 postgresql-15-pgdg-pgroonga postgresql-server-dev-15
    # 再源码编译zhparser

    四、最终选型建议汇总

    1. 新项目自建,追求最低安装难度、最少编译坑 → PostgreSQL 15(首选)
    2. 现有环境只能更低版本、短期项目 → PostgreSQL 14
    3. 除非你有刚需 PG16 + 新特性,否则不要上 16/17,避免 zhparser 编译阻碍