使用 Docker 安装带有 pgvector 扩展的 PostgreSQL 数据库主要有两种方式,你可以根据自己的需求选择最合适的一种。
方法一:使用官方 PostgreSQL 镜像并手动安装扩展(更灵活)
这种方式使用官方的 postgres 镜像,容器启动后需要手动进入容器启用扩展。
-
运行 PostgreSQL 容器 打开终端,执行以下命令启动一个容器。请务必将
yourpassword替换为你自己设定的安全密码。docker run -d \ --name postgres-pgvector \ -e POSTGRES_PASSWORD=yourpassword \ -p 5432:5432 \ -v postgres_data:/var/lib/postgresql/data \ postgres:16-d: 后台运行容器。--name: 为容器指定一个名称。-e POSTGRES_PASSWORD: 设置 PostgreSQL 超级用户postgres的密码。-p 5432:5432: 将容器的5432端口映射到本机的5432端口。-v postgres_data:/var/lib/postgresql/data: 创建一个名为postgres_data的Docker卷来持久化数据库数据,防止容器删除后数据丢失。
-
进入容器并安装
pgvector扩展 容器启动后,需要进入容器内部,从源码编译并安装扩展。# 进入容器的交互式终端 docker exec -it postgres-pgvector bash # 更新包列表并安装编译工具(容器内操作) apt-get update && apt-get install -y git build-essential postgresql-server-dev-16 # 克隆 pgvector 源码并编译安装 cd /tmp git clone --branch v0.8.0 https://github.com/pgvector/pgvector.git cd pgvector make make install # 退出容器 exit
方法二:使用预装了 pgvector 的镜像(更便捷)
这种方式使用社区维护的 ankane/pgvector 或 pgvector/pgvector 镜像,这些镜像已经预装了 pgvector 扩展,开箱即用,更为便捷。
- 运行预装
pgvector的容器
或者使用docker run -d \ --name postgres-pgvector \ -e POSTGRES_PASSWORD=yourpassword \ -p 5432:5432 \ -v postgres_data:/var/lib/postgresql/data \ ankane/pgvector:latestpgvector/pgvector镜像指定 PostgreSQL 版本:docker run -d \ --name postgres-pgvector \ -e POSTGRES_PASSWORD=yourpassword \ -p 5432:5432 \ -v postgres_data:/var/lib/postgresql/data \ pgvector/pgvector:pg17
启用扩展并验证安装
无论使用哪种安装方式,最后都需要连接到数据库并启用 vector 扩展。
-
连接到 PostgreSQL
docker exec -it postgres-pgvector psql -U postgres -
创建扩展并验证 在
psql命令行中执行以下SQL语句:-- 创建扩展(每个需要使用向量功能的数据库只需执行一次) CREATE EXTENSION IF NOT EXISTS vector; -- 验证扩展是否成功安装 SELECT extname, extversion FROM pg_extension WHERE extname = 'vector';如果看到类似下面的输出,说明
pgvector已成功安装。extname | extversion --------+------------ vector | 0.8.0 (1 row) -
进行简单测试 可以创建一个包含向量列的表来快速测试。
-- 创建一个测试表,向量维度为3 CREATE TABLE items ( id bigserial PRIMARY KEY, embedding vector(3) ); -- 插入一些向量数据 INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'); -- 执行向量相似性查询(查找与[3,1,2]最接近的向量) SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5; -- 退出 psql \q
使用 Docker Compose (推荐用于开发环境)
对于开发环境,使用 docker-compose.yml 文件可以更方便地管理配置。创建一个 docker-compose.yml 文件,内容如下:
version: '3.8'
services:
db:
image: ankane/pgvector:latest # 或者 pgvector/pgvector:pg17
container_name: postgres-pgvector
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: yourpassword
POSTGRES_DB: myvectordb # 可选,指定一个默认数据库
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
# 可选:在初始化时自动创建扩展
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
restart: unless-stopped
volumes:
postgres_data:
你可以在当前目录下创建一个 init.sql 文件,内容为 CREATE EXTENSION IF NOT EXISTS vector;,这样容器在首次初始化数据库时会自动启用该扩展。然后在 docker-compose.yml 所在目录运行 docker-compose up -d 即可启动。
总结
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 官方镜像 + 手动安装 | 官方源,更可控 | 步骤稍多,需要进入容器编译 | 对镜像来源有严格要求,或需要特定 PostgreSQL 版本组合时 |
| 预装镜像 | 简单快捷,开箱即用 | 镜像由第三方社区维护 | 大多数开发、测试和个人项目 |
建议:对于大多数开发者,方法二(使用 ankane/pgvector 或 pgvector/pgvector 镜像) 是最佳选择,它极大地简化了安装过程,让你可以快速开始使用向量数据库的功能。
安装完成后,你的 Docker PostgreSQL 就已经是一个功能完备的向量数据库了。你可以通过 psql 或者其他 PostgreSQL 客户端(如 DataGrip、DBeaver)连接进行后续开发。如果想了解如何使用 Python 或 Node.js 连接并操作向量数据,也可以随时问我。
注意:本文归作者所有,未经作者允许,不得转载