736 words
4 minutes
每日Skill学习 - pgvector(PostgreSQL 向量数据库)
每日Skill推荐:pgvector - PostgreSQL向量数据库 🔢
技能简介
pgvector 是一个用于 PostgreSQL 的向量数据库技能,通过 pgvector 扩展为 PostgreSQL 赋予向量相似性搜索能力。它支持:
- 📊 向量嵌入存储
- 🔍 语义相似性搜索
- 🤖 RAG(检索增强生成)流水线
- 🔀 混合搜索(向量 + 关键词)
核心功能
1. 创建向量表
pgvector 可以存储高维向量(最高支持 16,000 维),例如 OpenAI 的 1536 维文本嵌入:
CREATE TABLE IF NOT EXISTS documents ( id BIGSERIAL PRIMARY KEY, content TEXT NOT NULL, embedding vector(1536) NOT NULL, metadata JSONB, created_at TIMESTAMPTZ DEFAULT NOW());2. 索引加速搜索
支持两种索引类型:
- HNSW — 更高的准确性,适合中等规模数据
- IVFFlat — 更快的构建速度,适合大规模数据
-- 创建 HNSW 索引CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops)WITH (m = 16, ef_construction = 64);3. 向量相似性搜索
支持三种距离计算方式:
| 操作符 | 描述 |
|---|---|
<-> | 欧几里得距离 |
<=> | 余弦距离 |
<#> | 内积 |
-- 余弦相似性搜索SELECT id, content, (1 - (embedding <=> '[query_embedding]')) AS similarityFROM documentsORDER BY embedding <=> '[query_embedding]'LIMIT 5;4. 混合搜索
结合向量搜索和全文搜索,实现更精准的检索:
SELECT id, content, (1 - (embedding <=> '[query_embedding]')) AS vector_score, ts_rank(to_tsvector('english', content), plainto_tsquery('english', 'search terms')) AS text_scoreFROM documentsWHERE content ILIKE '%search terms%'ORDER BY (vector_score * 0.7 + text_score * 0.3) DESCLIMIT 10;5. RAG 流水线
pgvector 可以完美支持 RAG 应用:
-- 存储文档块CREATE TABLE document_chunks ( id BIGSERIAL PRIMARY KEY, document_id BIGINT REFERENCES documents(id), chunk_text TEXT NOT NULL, chunk_embedding vector(1536) NOT NULL, chunk_index INT NOT NULL);
-- 检索相关块作为 LLM 上下文SELECT chunk_textFROM document_chunksWHERE document_id = ?ORDER BY chunk_embedding <=> '[question_embedding]'LIMIT 5;使用方法
连接数据库
# 默认连接到 localhost:5433psql -h localhost -p 5433 -U damien -d postgres
# 或设置环境变量export PGHOST=localhostexport PGPORT=5433export PGUSER=damienexport PGDATABASE=postgresPython 批量插入
import psycopg2import numpy as np
conn = psycopg2.connect( host="localhost", port=5433, user="damien", database="postgres")cur = conn.cursor()for text, embedding in documents: cur.execute( "INSERT INTO documents (content, embedding) VALUES (%s, %s)", (text, embedding.tolist()) )conn.commit()应用场景
- 语义搜索 — 通过含义而非关键词查找文档
- RAG — 为 LLM 检索相关上下文
- 推荐系统 — 查找相似商品/内容
- 异常检测 — 发现嵌入空间中的异常点
- 图像/视频搜索 — 存储和查询视觉嵌入
我的评价
⭐ 推荐指数:4.5/5
优点:
- ✅ 将强大的向量搜索能力带入成熟的 PostgreSQL 生态
- ✅ 支持混合搜索,结合传统关键词匹配和语义理解
- ✅ 与现有 PostgreSQL 工具链完美兼容
- ✅ 支持 Python 批量操作,RAG 开发友好
注意:
- ⚠️ 向量维度必须与嵌入模型匹配
- ⚠️ HNSW 索引占用较多内存,大规模数据需注意配置
适用人群: AI 应用开发者、数据工程师、需要构建语义搜索或 RAG 系统的技术团队。
这是「每日Skill学习」系列的第篇文章,探索有趣有用的 AI 工具和技能。
每日Skill学习 - pgvector(PostgreSQL 向量数据库)
https://maomaoz.org/posts/daily-skill-2026-06-07/