pgvector
pgvector 是 PostgreSQL 扩展:在已有库里加 vector 列,用 SQL 做相似度查询。不必再运维一套独立向量数据库。扩展仓库:pgvector/pgvector。Postgres 本身(安装、SQL、索引)见本站 PostgreSQL 教程。
适合「用户表、文章表已经在 PG」的团队。纯本地试 RAG,先走 Chroma。
启用扩展
发行版需带 pgvector(Debian 包、Postgres.app、或 pgvector/pgvector Docker 镜像)。连上之后:
没有这条命令,后面的类型和 <=> 都不会存在。权限不够时找管理员在目标数据库执行一次。
最小表与余弦查询
维度必须和嵌入模型一致:text-embedding-3-small 默认 1536;bge-m3 常见 1024。建表后不要改维,否则整列重嵌。
真实查询会传入 1536 维,上面的两维只是语法示意。常用算子:
文本嵌入一般用余弦。数据量小可以先不建 HNSW,顺序扫描也能教;上万行再加索引。
Python:psycopg + pgvector
register_vector(conn) 让 Python list / NumPy 数组能写入 vector 列。忘记注册时,插入会报类型错误。
已有业务表时不要另起炉灶,直接加列:
回填脚本:SELECT id, body FROM articles WHERE embedding IS NULL,逐批 embed 再 UPDATE。完整例子见 实战案例 案例 2。
和 RAG 的关系
SQL 里可以同时写 WHERE org_id = 42 AND published 和 ORDER BY embedding <=> :q。这是 pgvector 相对纯向量库的优势:权限、租户、时间过滤跟相似度在同一条语句里。提示词侧仍然要写「只根据 content 回答」。
下一步
- Qdrant
- PostgreSQL 教程
- 实战案例 案例 2