pgvector扩展使PostgreSQL支持高效向量召回,通过安装插件、创建向量表、插入数据、执行相似度搜索并建立HNSW索引提升性能,适用于推荐系统与语义搜索等场景。

PostgreSQL 实现向量召回主要依赖扩展插件,其中最主流的是 pgvector。它为 PostgreSQL 提供了高效的向量存储与相似度计算能力,适用于推荐系统、语义搜索、图像检索等场景。
1. 安装 pgvector 扩展
pgvector 是一个开源的 PostgreSQL 扩展,支持向量的存储和余弦相似度、欧氏距离、内积等计算。
在使用前需安装该扩展:
- 通过源码编译安装(推荐用于生产环境):
git clone https://github.com/pgvector/pgvector.git
cd pgvector
make && make install
- 启用扩展(在目标数据库中执行):
CREATE EXTENSION IF NOT EXISTS vector;
2. 创建带向量字段的表
使用 vector 数据类型定义向量列,例如存储 768 维的句子嵌入向量:
CREATE TABLE items (
id bigserial PRIMARY KEY,
content text,
embedding vector(768)
);
3. 插入向量数据
插入时将浮点数组转换为 vector 类型:
INSERT INTO items (content, embedding)
VALUES ('这是一个示例文本', '[0.1, 0.2, ..., 0.768]');
4. 向量相似度搜索(召回)
pgvector 支持多种距离度量方式:
- 余弦相似度:embedding query_vector
- L2 距离:embedding query_vector
- 内积:embedding => query_vector(适合负内积)
示例:查找最相似的 5 条记录(按余弦相似度排序):
SELECT content, embedding '[0.1, 0.2, ...]' AS cosine_distance
FROM items
ORDER BY cosine_distance
LIMIT 5;
5. 创建索引提升召回性能
对高维向量进行全表扫描效率低,pgvector 支持构建 HNSW 索引 加速近似最近邻搜索:
CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops);
可选的操作符类包括:
- vector_cosine_ops —— 余弦相似度
- vector_l2_ops —— 欧氏距离
- vector_ip_ops —— 内积
6. 进阶用法建议
- 使用连接池管理数据库连接,避免频繁建连开销
- 定期 VACUUM 和 ANALYZE 保持查询计划高效
- 对于大规模数据,考虑分库分表或结合外部向量数据库做预筛选
- 测试不同维度和索引参数(如 M、ef_construction)平衡精度与速度
基本上就这些。pgvector 让 PostgreSQL 具备了轻量级向量搜索能力,适合中小规模语义召回场景,部署简单,与现有 SQL 生态无缝集成。不复杂但容易忽略细节,比如索引类型和距离函数的匹配问题。










