要把你现有的 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 主要支持两种索引算法:

  1. IVFFlat (倒排索引):构建速度快,适合数据量较大的静态数据集。

  2. HNSW (分层导航小世界):查询速度更快,但构建索引也稍慢,适合数据会动态增加或对查询延迟敏感的场景。

创建 HNSW 索引示例(推荐)

sql

-- 为 embedding 字段创建 HNSW 索引,使用 cosine 距离
CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops);
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐