Linux环境pgsql扩展向量库
要把你现有的 PostgreSQL 变成一个向量数据库,关键就是安装扩展。它在标准 PostgreSQL 基础上增加了专门的向量数据类型和索引,让你能存储和检索 AI 生成的向量数据(例如文本或图片的 Embedding)。由于你的 PostgreSQL 是运行在 Docker 容器里的,过程会稍有不同,需要先进入容器内部安装扩展,然后再启用。
要把你现有的 PostgreSQL 变成一个向量数据库,关键就是安装 pgvector 扩展。它在标准 PostgreSQL 基础上增加了专门的向量数据类型和索引,让你能存储和检索 AI 生成的向量数据(例如文本或图片的 Embedding)。
由于你的 PostgreSQL 是运行在 Docker 容器里的,过程会稍有不同,需要先进入容器内部安装扩展,然后再启用。
🔧 第一步:进入容器并安装依赖/编译环境
标准的 postgres:16 镜像默认不包含 pgvector 的编译环境,需要先安装。
bash
# 1. 进入你的 PostgreSQL 容器 docker exec -it my-postgres bash # 2. 更新包列表并安装必要的编译工具和 git apt-get update apt-get install -y postgresql-server-dev-16 build-essential git # 3. 克隆 pgvector 源码并编译安装 git clone https://github.com/pgvector/pgvector.git cd pgvector make make install # 4. 安装完成后,退出容器回到宿主机 exit
💡 提示:如果你的容器网络连接 GitHub 较慢或失败,可以考虑使用
--build-arg构建自定义镜像,或者在宿主机下载好源码包后用docker cp复制进容器。
🚀 第二步:启用 pgvector 扩展
安装完成后,就可以在数据库中启用它了。
bash
# 使用 root 用户连接到你的 mydb 数据库,并创建扩展 docker exec -it my-postgres psql -U root -d mydb -c "CREATE EXTENSION IF NOT EXISTS vector;"
验证是否成功:执行以下命令,如果能查到 vector 插件信息,就说明安装成功了。
bash
docker exec -it my-postgres psql -U root -d mydb -c "SELECT * FROM pg_extension;"
🧪 第三步:测试向量存储与检索
一切就绪后,我们来快速测试一下。
1. 创建带向量字段的表
向量字段的类型是 vector,括号里的数字代表向量的维度(例如 OpenAI 的 text-embedding-ada-002 模型是 1536 维)。
sql
-- 创建一个测试表,embedding 字段是 3 维向量 CREATE TABLE items (id SERIAL PRIMARY KEY, embedding VECTOR(3));
2. 插入向量数据
sql
INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
3. 执行向量相似度搜索
使用 <-> 操作符计算欧几里得距离,找最相似的项。
sql
-- 查找与 '[3,1,2]' 最相似的项 SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
📊 支持的相似度算法
pgvector 提供了多种距离函数,方便根据不同的业务场景选择。
| 操作符 | 距离类型 | 适用场景 |
|---|---|---|
<-> |
欧几里得距离 (L2) | 最通用,计算绝对距离 |
<=> |
余弦距离 | 语义搜索,关注方向而非长度 |
<#> |
负内积 | 配合索引使用,通常用于推荐系统 |
🚀 第四步:为了性能创建索引(进阶)
当你的数据量增长到几千甚至上万条时,为了查询速度,强烈建议创建索引。pgvector 主要支持两种索引算法:
-
IVFFlat (倒排索引):构建速度快,适合数据量较大的静态数据集。
-
HNSW (分层导航小世界):查询速度更快,但构建索引也稍慢,适合数据会动态增加或对查询延迟敏感的场景。
创建 HNSW 索引示例(推荐)
sql
-- 为 embedding 字段创建 HNSW 索引,使用 cosine 距离 CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops);
更多推荐


所有评论(0)