我先在Windows 11通过WSL安装了Ubuntu 24.04,然后在Ubuntu 24.04上使用Docker安装PostgreSQL 18并集成了向量存储插件,完整步骤如下。

PostgreSQL 18
1 环境准备(先决条件)
1.1 安装Docker
第一确保在Ubuntu 24.04系统上已安装Docker:
sudo apt update
sudo apt install docker.io
sudo systemctl enable docker
sudo systemctl start docker
1.2 创建专用网络
为PostgreSQL容器创建专用网络以实现更好的网络隔离:
docker network create pg-network
- 创建专用网络(如pg-network)的首要目的在于实现网络隔离,这能有效避免容器间的端口冲突,并提升整体应用架构的安全性。
- 其次,在专用网络内部,Docker提供了内置的DNS解析功能,容器间可以通过容器名称直接进行通信。例如,您的应用容器只需连接到pg-network,即可使用postgres-vector这个容器名访问数据库,无需关心其动态分配的内部IP地址,极大地简化了连接配置并增强了应用的灵活性。
- 专用网络能够创建一个逻辑上隔离的网络环境,确保PostgreSQL数据库与前端应用或其他后端服务之间的所有数据传输都在一个受保护的私有通道内进行,显著降低了数据在公共网络层面被拦截的风险。
- 通过隔离网络流量,专用网络可以减少不必要的网络拥塞,为数据库这类对I/O性能敏感的服务提供更稳定、低延迟的网络环境。结合您历史部署中提及的PostgreSQL 18新I/O子系统,能进一步发挥性能潜力。
2 PostgreSQL 18安装方法
2.1 方法一:使用预构建的pgvector镜像(我使用此方法)
这是最简单快捷的方式,直接使用已集成pgvector扩展的PostgreSQL镜像:
# 拉取pgvector镜像(支持PostgreSQL 18)
$ docker pull pgvector/pgvector:pg18
...
Digest: sha256:3afc3b914cd2c8f0ed961d3ef4fbce9ca6585f57bae3d1b538e4711535397b0d
Status: Downloaded newer image for pgvector/pgvector:pg18
docker.io/pgvector/pgvector:pg18
# 启动容器
$ docker run -d --name pg-vector --network pg-network -p 5432:5432 -e POSTGRES_USER=pguser -e POSTGRES_PASSWORD=pg123456$ -e POSTGRES_DB=mydb -v pgdata:/var/lib/postgresql/data --restart=unless-stopped docker.io/pgvector/pgvector:pg18
2.2 方法二:使用官方镜像并手动安装pgvector
如果您希望使用官方PostgreSQL 18镜像:
# 拉取官方PostgreSQL 18镜像
docker pull postgres:18
# 启动容器
docker run -d --name postgresql-18 --network pg-network -p 5432:5432 -e POSTGRES_PASSWORD=yourpassword -e POSTGRES_DB=vectordb -v pgdata:/var/lib/postgresql/data --restart=unless-stopped postgres:18
pgvector扩展配置:
2.2.1 进入容器并安装依赖
docker exec -it postgresql-18 bash
# 在容器内安装编译工具
apt-get update && apt-get install -y build-essential postgresql-server-dev-18 git
2.2.2 编译安装pgvector
# 下载并编译pgvector
cd /tmp
git clone https://github.com/pgvector/pgvector.git
cd pgvector
make && make install
2.2.3 启用pgvector扩展
# 连接到数据库
psql -U postgres -d vectordb
# 创建向量扩展
CREATE EXTENSION vector;
2.3 方法三:使用Docker Compose部署
创建docker-compose.yml文件:
version: '3.8'
services:
postgres:
image: postgres:18
container_name: postgres-18-vector
environment:
POSTGRES_DB: ai
POSTGRES_USER: root
POSTGRES_PASSWORD: 123456
ports:
- "5432:5432"
volumes:
- ./pgvector_data:/var/lib/postgresql/data
restart: unless-stopped
启动服务:
docker-compose up -d
2.4 验证安装
# 1)确认容器运行状态:确认容器状态为"Up"后继续下一步
$ docker ps -f name=pg-vector
# 2)进入容器并连接数据库
$ docker exec -it pg-vector psql -U pguser -d mydb
psql (18.0 (Debian 18.0-1.pgdg12+3))
Type "help" for help.
mydb=#
3)执行基本验证命令
-- 查看当前数据库
SELECT current_database();
-- 列出所有数据库
l
-- 查看当前连接信息
conninfo
-- 验证pgvector扩展是否可用
SELECT * FROM pg_extension WHERE extname = 'vector';
-- 或者查看所有扩展
dx
-- 启用pgvector扩展(重点)
CREATE EXTENSION vector;
-- 测试向量功能(可选)
-- 创建包含向量字段的表
CREATE TABLE test_vectors (id bigserial PRIMARY KEY, embedding vector(3));
-- 插入向量数据
INSERT INTO test_vectors (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
-- 查询类似向量
SELECT * FROM test_vectors ORDER BY embedding <-> '[3,1,2]' LIMIT 5;
-- 创建向量索引
CREATE INDEX ON test_vectors USING hnsw (embedding vector_cosine_ops);
4)退出连接
q
3 常见问题解决
3.1 创建存储向量的表时报type “vector” does not exist错误
如下:
mydb=# create table test_vectors (id bigserial primary key, embedding vector(3));
ERROR: type "vector" does not exist
LINE 1: ...e test_vectors (id bigserial primary key, embedding vector(3))...
^
先查看支持向量存储的扩展是否已安装:
-- 检查扩展是否在可用扩展列表中
mydb=# SELECT * FROM pg_available_extensions WHERE name = 'vector';
name | default_version | installed_version | comment
--------+-----------------+-------------------+------------------------------------------------------
vector | 0.8.1 | | vector data type and ivfflat and hnsw access methods
(1 row)
-- 或者执行命令检查已安装的扩展
mydb=# SELECT * FROM pg_extension WHERE extname = 'vector';
oid | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
-------+---------+----------+--------------+----------------+------------+-----------+--------------
16389 | vector | 10 | 2200 | t | 0.8.1 | |
(1 row)
上面的输出说明扩展已经安装了,但估计是还未启用。执行下面的命令启用扩展:
-- 启用pgvector扩展
CREATE EXTENSION vector;
再次创建创建存储向量的表OK!
mydb=# CREATE TABLE test_vectors (
id bigserial PRIMARY KEY,
embedding vector(3)
);
CREATE TABLE
4 总结
通过以上步骤,您可以在Ubuntu 24.04上成功部署带有向量存储功能的PostgreSQL 18数据库。推荐使用方法一(预构建镜像)以获得最佳的兼容性和性能。pgvector扩展为AI应用提供了强劲的向量类似性搜索能力,支持余弦距离、欧氏距离等多种类似性度量方式22。
PostgreSQL 18的新I/O子系统提供了显著的性能提升,结合pgvector的向量搜索能力,为构建AI驱动的应用程序提供了理想的数据库解决方案。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...


