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 similarity
FROM documents
ORDER 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_score
FROM documents
WHERE content ILIKE '%search terms%'
ORDER BY (vector_score * 0.7 + text_score * 0.3) DESC
LIMIT 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_text
FROM document_chunks
WHERE document_id = ?
ORDER BY chunk_embedding <=> '[question_embedding]'
LIMIT 5;

使用方法#

连接数据库#

Terminal window
# 默认连接到 localhost:5433
psql -h localhost -p 5433 -U damien -d postgres
# 或设置环境变量
export PGHOST=localhost
export PGPORT=5433
export PGUSER=damien
export PGDATABASE=postgres

Python 批量插入#

import psycopg2
import 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()

应用场景#

  1. 语义搜索 — 通过含义而非关键词查找文档
  2. RAG — 为 LLM 检索相关上下文
  3. 推荐系统 — 查找相似商品/内容
  4. 异常检测 — 发现嵌入空间中的异常点
  5. 图像/视频搜索 — 存储和查询视觉嵌入

我的评价#

推荐指数:4.5/5

优点:

  • ✅ 将强大的向量搜索能力带入成熟的 PostgreSQL 生态
  • ✅ 支持混合搜索,结合传统关键词匹配和语义理解
  • ✅ 与现有 PostgreSQL 工具链完美兼容
  • ✅ 支持 Python 批量操作,RAG 开发友好

注意:

  • ⚠️ 向量维度必须与嵌入模型匹配
  • ⚠️ HNSW 索引占用较多内存,大规模数据需注意配置

适用人群: AI 应用开发者、数据工程师、需要构建语义搜索或 RAG 系统的技术团队。


这是「每日Skill学习」系列的第篇文章,探索有趣有用的 AI 工具和技能。

每日Skill学习 - pgvector(PostgreSQL 向量数据库)
https://maomaoz.org/posts/daily-skill-2026-06-07/
Author
讨厌猫猫雨
Published at
2026-06-07
License
CC BY-NC-SA 4.0