首页/AI/RAG 与向量库速查/pgvector 扩展安装与向量类型

pgvector 扩展安装与向量类型

pgvector 是 PostgreSQL 的向量扩展:安装扩展后可用 vector(n) 列存向量,配合距离算子与 ANN 索引在 SQL 内完成相似度检索,与业务表天然同库事务。

RAG 与向量库速查AI更新于 2026-10-13

pgvector 是什么

pgvector 是 PostgreSQL 的向量扩展:安装后可用向量列存 embedding,配合距离算子与近似索引在 SQL 内完成相似度检索。它最大的优势是与业务表同库同事务——切片、权限、业务数据可以在一条语句里联表与过滤,不需要在数据库与向量库之间做一致性同步。

基本信息

载体PostgreSQL 扩展,需先在库中创建扩展
向量类型定长向量列,也可使用半精度类型节省空间
检索方式距离算子排序,配合近似索引加速
权限要求创建扩展需要较高权限,普通应用账号通常没有

安装扩展与建表

安装扩展与建表
CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE kb_chunks (
    id        bigserial PRIMARY KEY,
    doc_id    text NOT NULL,
    content   text NOT NULL,
    embedding vector(1024)
);

-- 半精度索引列(可选,节省空间)
-- embedding halfvec(1024)

确认扩展

确认扩展
SELECT extname, extversion FROM pg_extension WHERE extname = 'vector';

使用要点

  • 向量列建议声明固定维度,避免插入时才发现维度不一致
  • 近似索引与数据量相关:小表直接精确排序反而更简单
  • 带过滤条件的检索要依赖普通索引,字段没索引时会退化为全表扫描
  • 写入用批量提交,逐条插入在大批量导入时效率很低
  • 把维度与距离算子写进建表脚本注释,交接时不必猜测

距离算子与用途

对比项说明注意
余弦距离按方向比较文本检索常用
内积方向与长度共同参与归一化后与余弦一致
欧氏距离绝对距离非文本特征更常用
近似索引加速大规模检索小数据量可不建

常见问题

  • 创建扩展权限不足:由管理员预装,应用账号只做读写
  • 维度写错:插入数据时才报错,批量导入中途失败需要重来
  • 带过滤检索慢:过滤字段未建普通索引
  • 近似索引参数未调:召回与延迟都不理想,需要按数据量重设
向量维度可固定也可留空:留空便于早期试验,但会限制部分索引类型的可用性,生产表建议写死维度。

与业务表协作

  • 切片表按文档标识建外键式关联,删除文档时可级联清理向量
  • 权限过滤直接写在查询条件里,与业务表的组织架构字段联表判断
  • 批量导入用事务分批提交,避免一次插入过多导致长事务
  • 向量列与文本列放在同一行,命中后无需二次查询即可组装上下文
  • 把建表语句纳入版本管理,维度与算子变更时能追溯

易错点

  • 应用用户没有创建扩展的权限时,改由管理员预装扩展
  • 维度写错在插入时才报错,批量导入中途失败要重来
  • 把向量与业务表放在不同库,联表过滤变成两次查询加应用层拼接
  • 忽略索引与维度的搭配,切换维度后旧索引失效

数据来源与参考

  • pgvector README(github.com/pgvector/pgvector)
  • PostgreSQL 官方文档(CREATE EXTENSION)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌