PGVector教程:30分钟给PostgreSQL加AI搜索
你已经在用PostgreSQL——加向量搜索可以保持技术栈简单。
💡 你将学到
你已经在用PostgreSQL——加向量搜索可以保持技术栈简单。
📜 目录
PGVector 教程 2026:30 分钟为 PostgreSQL 添加 AI 搜索
PGVector 是 PostgreSQL 的扩展,可为现有数据库添加向量存储和相似度搜索功能。凭借 22,400 个 GitHub Star,它是在不引入独立向量数据库的情况下添加语义搜索的最流行方式。如果你已经在运行 Postgres,本教程可在半小时内让你拥有一个可用的 RAG 搜索。
为什么选择 PGVector 而不是新数据库
| 因素 | PGVector | 专用向量数据库 |
|---|---|---|
| 安装 | 1 条命令 | 需要运行新服务 |
| 数据一致性 | 与数据同库 | 需要同步 |
| 事务 | 完整 ACID | 各不相同 |
| 扩展性 | 约 100 万向量以内表现出色 | 1 亿以上更优 |
| 你已在运行 Postgres | 免费 | 额外成本 |
第 1 步:安装扩展
CREATE EXTENSION IF NOT EXISTS vector;
在 Ubuntu 上:apt install postgresql-16-pgvector。在 Mac 上:brew install pgvector。
第 2 步:创建表
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
embedding vector(768)
);
768 维度必须与你的嵌入模型匹配(bge-m3 使用 1024;nomic-embed-text 使用 768)。
第 3 步:插入嵌入(Python)
import psycopg2
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
vec = client.embeddings.create(model="nomic-embed-text", input="your text").data[0].embedding
conn = psycopg2.connect("dbname=app")
conn.execute(
"INSERT INTO documents (content, embedding) VALUES (%s, %s)",
("your text", vec)
)
第 4 步:搜索
SELECT content, 1 - (embedding <=> query_embedding) AS similarity
FROM documents
ORDER BY embedding <=> query_embedding
LIMIT 5;
<=> 运算符表示余弦距离。数值越小 = 越相似。
第 5 步:添加索引(大规模场景下必需)
CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);
HNSW 索引可在数据超过约 1 万行后,将搜索时间从秒级缩短到毫秒级。
常见问题
PGVector 与专用向量数据库相比如何? 对于约 1000 万向量以下的大多数应用,PGVector 在简单性和一致性方面更胜一筹。Chroma(28,900 Star)、Qdrant(33,700 Star)和 Milvus(45,400 Star)在超大规模场景或需要专用存储时更具优势。
是否兼容 LangChain? 是的——langchain-postgres 提供了 PGVector 向量存储类。
选择 HNSW 还是 IVFFlat 索引? 选 HNSW——准确率更高且无需调参。IVFFlat 已属遗留方案。
相关文章
❓ 常见问题
PGVector 与专用向量数据库相比如何?
对于约 1000 万向量以下的大多数应用,PGVector 在简单性和一致性方面更胜一筹。Chroma(28,900 Star)、Qdrant(33,700 Star)和 Milvus(45,400 Star)在超大规模场景或需要专用存储时更具优势。
是否兼容 LangChain?
是的——langchain-postgres 提供了 PGVector 向量存储类。
选择 HNSW 还是 IVFFlat 索引?
选 HNSW——准确率更高且无需调参。IVFFlat 已属遗留方案。
本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。
