docker 安装 pg 数据库,及安装 pgvector

ragnar 9小时前 ⋅ 10 阅读

使用 Docker 安装带有 pgvector 扩展的 PostgreSQL 数据库主要有两种方式,你可以根据自己的需求选择最合适的一种。

方法一:使用官方 PostgreSQL 镜像并手动安装扩展(更灵活)

这种方式使用官方的 postgres 镜像,容器启动后需要手动进入容器启用扩展。

  1. 运行 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卷来持久化数据库数据,防止容器删除后数据丢失。
  2. 进入容器并安装 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/pgvectorpgvector/pgvector 镜像,这些镜像已经预装了 pgvector 扩展,开箱即用,更为便捷。

  1. 运行预装 pgvector 的容器
    docker run -d \
      --name postgres-pgvector \
      -e POSTGRES_PASSWORD=yourpassword \
      -p 5432:5432 \
      -v postgres_data:/var/lib/postgresql/data \
      ankane/pgvector:latest
    
    或者使用 pgvector/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 扩展。

  1. 连接到 PostgreSQL

    docker exec -it postgres-pgvector psql -U postgres
    
  2. 创建扩展并验证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. 进行简单测试 可以创建一个包含向量列的表来快速测试。

    -- 创建一个测试表,向量维度为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/pgvectorpgvector/pgvector 镜像) 是最佳选择,它极大地简化了安装过程,让你可以快速开始使用向量数据库的功能。

安装完成后,你的 Docker PostgreSQL 就已经是一个功能完备的向量数据库了。你可以通过 psql 或者其他 PostgreSQL 客户端(如 DataGrip、DBeaver)连接进行后续开发。如果想了解如何使用 Python 或 Node.js 连接并操作向量数据,也可以随时问我。


全部评论: 0

    我有话说:

    目录