Linux环境下基于Docker安装 PostgreSQL数据库并配置 pgvector

PostgreSQL 是一个功能强大的开源关系型数据库管理系统,支持 SQL 标准并提供了高级功能如事务处理、复杂查询和多种数据类型扩展。

配置 pgvector 扩展后,PostgreSQL 能够高效存储和查询向量数据,支持相似性搜索(如余弦相似度、欧氏距离等),使数据库可以直接处理 AI 模型生成的嵌入向量(如文本、图像嵌入),从而简化推荐系统、语义搜索和 RAG(检索增强生成)等 AI 应用的开发,无需依赖外部向量数据库。

在本篇博客中,我们介绍两种安装 PostgreSQL数据库并配置 pgvector的方式。

方式 1:docker-compose 安装 PostgreSQL + 容器内安装 pgvector

1.1 基于 docker-compose 安装 PostgreSQL 数据库

参考博客:

下面介绍如何以 docker compose 形式启动PostgreSQL服务。

  1. 安装相关依赖包,推荐使用系统自带的 docker compose
sudo apt-get update
sudo apt-get install docker-compose-plugin  # 新版本

注意: 这里,如果安装的是新版本的 docker-compose-plugin,后续命令为 docker compose (没有中间的横线-

注意事项:

  1. 不要使用 pip 安装 docker compose,特别是当您使用 Anaconda 环境时。
  2. 使用系统包管理器(apt/yum)安装 docker compose

这里,笔者之前在 Anaconda 的虚拟环境中 使用 pip install docker-compose 就出现了报错,所以大家最好 使用 系统包管理器(apt/yum)来安装 docker-compose

  1. 编写 docker-compose 所需的配置文件。
    这里我们的配置文件为 docker-compose.yaml,文件内容为:
services:
  postgres:
    image: postgres:15        # 指定具体版本
    container_name: postgres_db
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
      TZ: Asia/Shanghai       # 设置时区
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:             # 健康检查
      test: ["CMD", "pg_isready", "-U", "nange"]
      interval: 10s
      timeout: 5s
      retries: 5
    command: ["postgres", "-c", "max_connections=200"]  # 自定义配置

volumes:
  pgdata:

这里,我们配置的容器名称为 postgres_db

  1. 运行下面命令启动PostgreSQL数据库服务:
sudo docker compose up -d

这个命令会:

  • 以后台模式 (-d) 启动所有定义的服务
  • 如果本地有 postgres:15 镜像,则直接加载使用。若没有 postgres:15 镜像,会自动从镜像仓库拉取。
  • 创建名为 pgdata 的持久化卷
  • 启动容器并应用所有配置

运行成功的话会出现如下界面:
在这里插入图片描述

  1. 检查容器是否正常运行:
docker compose ps

或查看所有容器状态:

docker ps
  1. 连接数据库

您可以通过以下方式连接数据库:

方式一:在容器内使用 psql

docker compose exec postgres_db psql -U postgres

方式二:从外部客户端连接

使用任何 PostgreSQL 客户端工具连接,如Navicat可视化工具。
在这里插入图片描述

  1. 停止服务(当需要时)
docker compose down

如果要同时删除数据卷(慎用,会删除所有数据):

docker compose down --volumes

1.2 容器内配置 pgvector

在容器中按照如下步骤进行操作。

  1. 进入容器
docker exec -it postgres_db bash

其中,postgres_db 为容器名称。

  1. 容器内安装依赖
apt update
apt install -y git build-essential postgresql-server-dev-15

【报错记录】:这里,笔者运行时出现报错:

W: Failed to fetch http://deb.debian.org/debian/dists/bookworm/InRelease  Could not connect to debian.map.fastlydns.net:80 (151.101.90.132)

W: Failed to fetch http://apt.postgresql.org/pub/repos/apt/dists/bookworm-pgdg/InRelease  Could not connect to apt.postgresql.org:80 (151.101.91.52), connection timed out

需要检查下服务器是否开通了 http://deb.debian.orghttp://apt.postgresql.org 的访问权限。如果没有权限,可以申请开通,或者使用国内清华或阿里云的镜像源。

  1. 容器内编译并安装 pgvector

这里主要参考 pgvector 官网:https://github.com/pgvector/pgvector

cd /tmp
git clone https://github.com/pgvector/pgvector.git
cd pgvector
make
make install

【容器环境无法连接github 网络的解决方案】:这里,我们的容器环境无法连接 github 网络,所以我们先本地PC环境手动下载 github 上的 pgvector 文件,再手动上传至服务器环境中,再通过 docker cp 命令将服务器上的文件拷贝至容器内。

注意:如果需要数据持久化,一定要使用Volume卷挂载的方式!!!

  1. docker cp 不会持久化数据,如果容器被删除(docker rm),复制的文件会丢失。
  2. 如果需要持久化存储,应该使用 Docker Volume(卷) 或 Bind Mount(绑定挂载):
# 命令语法
docker cp /源文件夹 容器名或ID:/容器内/目标路径/

# 这里,我们使用的命令为:
docker cp ./pgvector 010f4d6fa849:/tmp

其中 010f4d6fa849 为容器ID。

拷贝成功后,再进入容器内的 /tmp/pgvector 目录, 依次运行:

docker exec -it postgres_db
cd /tmp/pgvector
make
make install

出现如下界面:
在这里插入图片描述
在这里插入图片描述

  1. 检查扩展文件是否安装成功
ls -l /usr/share/postgresql/15/extension/vector*

出现如下界面说明扩展文件安装成功:
在这里插入图片描述

  1. 启用pgvector扩展

首先,在容器内部,使用 psql 登录 PostgreSQL 数据库:

psql -U postgres -d postgres 
  • psql:PostgreSQL 的交互式终端程序
  • -U postgres:指定使用 postgres 用户身份连接
  • -d postgres:指定连接到名为 postgres 的默认数据库

连接成功后出现如下界面:
在这里插入图片描述

然后,使用PostgreSQL 数据库中的 SQL 命令,安装名为 vector 的扩展(extension):

# -- 在psql中执行
CREATE EXTENSION vector;
# 或
CREATE EXTENSION IF NOT EXISTS vector;  # 仅在扩展未安装时执行

出现如下界面说明创建成功:
在这里插入图片描述

关于vector 扩展:

  • 这是 PostgreSQL 的一个扩展,用于支持向量(vector)数据类型和向量相似性搜索;
  • 常用于机器学习、AI应用,特别是需要存储和查询嵌入向量(embeddings)的场景;
  • 提供向量运算、相似度计算(如余弦相似度、欧氏距离等)功能。
  1. 验证安装是否成功

基于 PostgreSQL 的查询语句,检查数据库中是否已安装名为 vector 的扩展(extension):

SELECT * FROM pg_extension WHERE extname = 'vector';

出现如下界面:
在这里插入图片描述

方式 2:docker-compose + Dockerfile 直接配置PostgreSQL数据库及 pgvector

参考博客:

  1. 创建 Dockerfile
# 使用 PostgreSQL 15 基础镜像
FROM postgres:15

# 安装 pgvector
RUN apt-get update && \
    apt-get install -y postgresql-16-pgvector && \
    rm -rf /var/lib/apt/lists/*

# 设置启动命令
CMD ["postgres"]

注意:在上面的 Dockerfile 中使用 apt-get install -y postgresql-16-pgvector 命令安装依赖包,可能会存在找不到相关安装包的问题,pgvector官方推荐的是直接基于 github 项目源码进行编译的方式安装,具体可以参考本博客的 方法1的容器内安装 pgvector 的步骤。

  1. 创建 docker-compose.yaml
services:
  postgres:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: postgres_db
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
      TZ: Asia/Shanghai       # 设置时区
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
    restart: always
    healthcheck:             # 健康检查
      test: ["CMD", "pg_isready", "-U", "nange"]
      interval: 10s
      timeout: 5s
      retries: 5
    command: ["postgres", "-c", "max_connections=200"]  # 自定义配置

volumes:
  pgdata:
  1. 构建Dockerfile
docker compose build
  1. 运行容器
docker compose up -d
  1. 进入 postgres_db 容器
docker exec -it postgres_db bash
psql -U postgres -d postgres_db
  1. 判断vector工具是否安装成功
CREATE EXTENSION IF NOT EXISTS vector;

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值