pg_turbovec
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_turbovec | 1.29.0 | RAG | Apache-2.0 | Rust |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 1980 | pg_turbovec | 否 | 是 | 否 | 是 | 否 | 否 | turbovec |
| 相关扩展 | pg_turboquant vector vchord vectorscale |
|---|
Upstream v1.29.0 supports PostgreSQL 13-18 with PG19 experimental; PIGSTY RPM and DEB ship 1.29.0 for PostgreSQL 14-18, built with pgrx 0.19.1 against OpenBLAS.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.29.0 | 1817161514 | pg_turbovec | - |
| RPM | PIGSTY | 1.29.0 | 1817161514 | pg_turbovec_$v | openblas |
| DEB | PIGSTY | 1.29.0 | 1817161514 | postgresql-$v-pg-turbovec | libopenblas0 |
构建
您可以使用 pig build 命令构建 pg_turbovec 扩展的 RPM / DEB 包:
安装
您可以直接安装 pg_turbovec 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
创建扩展:
用法
来源:
pg_turbovec 1.29.0 提供稠密的 turbovec.vector 类型和 turbovec 最近邻索引访问方法。它将浮点坐标量化为 2、3 或 4 位,并使用堆向量对候选项重新排序。适合存储受限的余弦或内积搜索;应有意识地选择索引种类,因为默认平坦扫描的成本随行数线性增长。
创建与查询向量
距离操作符包括:<-> 表示 L2,<#> 表示负内积,<=> 表示余弦距离,<+> 表示 L1。当前索引支持按内积和余弦排序;L2 与 L1 只能执行精确运算。
turbovec.vector 类型接受 1–16,000 个坐标。建立索引的向量必须具有固定维度,且维度是 8 的倍数;当列本身是变长维度时,应使用检查约束或应用层校验。
选择并构建索引种类
这些 CREATE INDEX 语句是可选方案,不表示建议同时保留三种索引。默认平坦种类执行 O(n * dim) 量化扫描,经堆重排后可以达到精确召回,但在大行数下并非良好的延迟选择。WITH (lists = N) 启用可完全流出内存的 IVF 层;WITH (graph = true) 启用 Vamana 图,以便在中等规模下实现更低延迟的 ANN。
将 vec_cosine_ops 与 <=> 搭配,或将 vec_ip_ops 与 <#> 搭配。bit_width = 4 是默认值,通常更有利于召回率;2 位索引更小,但需要针对具体工作负载测试召回率。也支持三位索引。支持 CREATE INDEX CONCURRENTLY。
重要的调优控制项包括 turbovec.probes、turbovec.search_k、turbovec.oversample、turbovec.hi_dim_rerank、turbovec.iterative_scan 和 turbovec.cache_size_mb。每次只改变一个维度,并将近似结果与精确基线进行比较。
过滤与分区
对于稳定的过滤值,使用 PostgreSQL 部分索引;对于显式候选允许列表,使用文档所述的 turbovec.knn(..., allowed) 接口;对于普通的带过滤条件 ORDER BY ... LIMIT 查询,则使用迭代扫描。
版本 1.29 记录了如何使用原生 PostgreSQL 分区来处理超出单表规模的数据集。父表查询可在各分区的 TurboVec 索引之间使用 Merge Append:
应分别为每个分区执行构建、vacuum 和 reindex。基于粗粒度向量量化器的分区裁剪在 1.29.0 中仅是设计方案,并非已经交付的功能。
版本与完整性边界
- 控制文件将对象安装到模式
turbovec,不可重定位,且不要求shared_preload_libraries或重启服务器。 - 上游 v1.29 面向 PostgreSQL 13-18,并将 PostgreSQL 19 支持标记为实验性;当前 Pigsty 1.29.0 软件包覆盖 PostgreSQL 14-18,并提供匹配的 OpenBLAS 链接二进制文件。
- 上游 1.28.4 修复了持久化行数漂移问题,该问题可能破坏索引 ID 表;同时新增
turbovec.turbovec_check(regclass)。已经损坏的索引仍须通过REINDEX或删除后重建来恢复。 - 版本 1.29.0 是增量更新,保持 wire format 7;从健康的 1.28.4 索引升级时不要求重建。安装新文件后,执行
ALTER EXTENSION pg_turbovec UPDATE TO '1.29.0'即可。 - 虽然 1.29 的 reloption 解析器接受
bit_width = 1,但端到端一位索引尚未实现,CREATE INDEX会主动报错。请使用bit_width = 2、bit_width = 3或bit_width = 4。 - 磁盘上的 ID 表在非正常关机后仍存在有文档记录的崩溃安全缺口。应认真处理完整性错误,并遵循上游恢复指南。
只有索引所有者可以运行完整性检查器。应针对 is_corrupt 告警;当检查器或扫描报告损坏时,重建受影响的索引。成功升级版本不会修复已经损坏的索引。