pgvector 使用教程:PostgreSQL 向量搜索实战与性能优化指南
2026-05-27 6 0
随着 AI 搜索、知识库问答、推荐系统和 RAG(检索增强生成)的流行,越来越多开发者希望直接在关系型数据库中实现向量搜索能力。作为 PostgreSQL 的向量扩展,pgvector 可以让数据库支持向量存储、相似度搜索以及近似最近邻检索,无需额外引入专门的向量数据库。pgvector 支持向量字段、距离计算、索引优化,并可结合传统 SQL 查询实现混合搜索能力。
什么是 pgvector
PostgreSQL 的 pgvector 是一个开源扩展,它为 PostgreSQL 增加了向量类型与向量相似度检索能力,可以将文本、图片、用户行为等 Embedding 数据直接存储到数据库中,并通过 SQL 实现语义搜索。开发者可以在已有数据库架构中完成向量检索,而不需要额外维护独立向量数据库。
常见应用场景包括:
- AI 知识库检索(RAG)
- 智能问答系统
- 相似商品推荐
- 文本语义搜索
- 图像特征匹配
- 用户兴趣推荐
相比单独部署向量数据库,pgvector 的优势在于可以直接复用 PostgreSQL 的事务能力、JOIN 查询、备份恢复和权限控制机制。
安装 pgvector 扩展
首先确保 PostgreSQL 已安装,然后执行扩展安装。
在数据库中启用扩展:
CREATE EXTENSION vector;
或者:
CREATE EXTENSION IF NOT EXISTS vector;
执行后,数据库即可支持向量类型。很多云数据库服务已经默认支持 pgvector,例如 PostgreSQL 托管环境与云服务平台。
创建向量数据表
假设需要存储文章内容向量,可以创建如下数据表:
CREATE TABLE articles (
id BIGSERIAL PRIMARY KEY,
title TEXT,
content TEXT,
embedding VECTOR(1536)
);
这里:
- VECTOR(1536) 表示向量维度
- 1536 常见于 Embedding 模型输出维度
- embedding 用于存储文本语义向量
插入示例数据:
INSERT INTO articles (title, content, embedding)
VALUES
(
'PostgreSQL 教程',
'数据库基础知识',
'[0.12,0.55,0.78,0.21]'
);
pgvector 使用数组格式保存向量数据。
pgvector 向量搜索实战
向量搜索的核心是相似度计算。
例如查询与目标向量最相似的内容:
SELECT
id,
title
FROM articles
ORDER BY embedding <-> '[0.15,0.56,0.79,0.19]'
LIMIT 5;
其中:
- <-> 表示欧氏距离(L2 Distance)
- 距离越小,相似度越高
这是最基础的最近邻搜索方式。
pgvector 还支持多种距离计算方式:
1. 欧氏距离
embedding <-> vector
适用于一般向量距离计算。
2. 余弦距离
embedding <=> vector
通常用于文本语义搜索,尤其适合 Embedding 检索。
3. 内积搜索
embedding <#> vector
常见于推荐系统与相似度排序。
创建向量索引提升性能
如果数据量达到几十万甚至百万级,仅靠全表扫描会变慢,因此建议建立向量索引。
1. 使用 HNSW 索引
CREATE INDEX idx_articles_embedding
ON articles
USING hnsw (embedding vector_cosine_ops);
特点:
- 查询速度快
- 高召回率
- 更适合生产环境
HNSW 通常被认为是 pgvector 中更主流的近似搜索方案,但构建成本和内存消耗较高。
2. 使用 IVFFlat 索引
CREATE INDEX idx_articles_embedding_ivf
ON articles
USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);
特点:
- 构建较快
- 内存占用低
- 适合大规模向量数据
但它通常需要提前训练索引,对查询准确率与性能之间做平衡。
pgvector 与全文检索结合
真实业务中,通常不会只依赖向量搜索,而是将 PostgreSQL 的全文检索与向量检索结合,实现 Hybrid Search(混合搜索)。
例如:
SELECT
id,
title
FROM articles
WHERE content @@ plainto_tsquery('数据库')
ORDER BY embedding <=> '[0.15,0.56,0.79]'
LIMIT 10;
这样既可以满足关键词精准匹配,又兼顾语义理解效果,更适合知识库、智能搜索等场景。
pgvector 实战应用场景
1. AI 知识库问答
用户问题转换为向量后,匹配最相关文档,再交给大模型生成答案。
2. 内容推荐系统
根据用户行为向量寻找相似内容,实现个性化推荐。
3. 智能搜索
相比传统关键词搜索,向量搜索可以理解语义。
例如,用户搜索“数据库扩容”,系统也可能找到“数据库分库分表”、“数据库水平扩展”,因为语义更接近,而不仅依赖关键词。
pgvector 使用建议与避坑
在生产环境中,建议注意以下问题:
- 小数据量不要急着建向量索引,全量扫描可能更准确。
- 优先使用余弦距离处理文本 Embedding。
- 大规模检索优先考虑 HNSW。
- 结合 PostgreSQL 普通字段过滤,避免无意义向量扫描。
- 尽量使用混合搜索提升准确率。
社区讨论中,一个常见误区是认为向量索引一定必要,但实际效果取决于数据规模、过滤条件和查询模式。
总体来看,pgvector 是 PostgreSQL 进入 AI 检索时代的重要扩展,它允许开发者在已有数据库体系中直接实现向量搜索,不仅减少架构复杂度,还能复用成熟数据库生态。对于希望快速构建 AI 知识库、语义搜索、推荐系统的团队来说,pgvector 是一个成本低、上手快且非常实用的方案。