前言

在 1panel 中安装 lobechat DB 版,但 1panel 中的 PostgreSQL 没有 pgvector 扩展,需要手动安装扩展。在安装完成并可以正常使用后,我将此安装过程进行记录。

环境信息

  • 1Panel:V2.0.11

  • postgresql:17.6-alpine

  • pgvector:0.7.0

安装步骤

0. 进入容器

1. 环境准备

安装必要的编译工具和依赖。

# 更新包管理器
apk update

# 安装基础编译工具
apk add --no-cache git build-base cmake postgresql-dev clang llvm

如果安装失败,失败情况可能如下:

/ # apk add --no-cache git build-base cmake postgresql-dev clang llvm
fetch https://dl-cdn.alpinelinux.org/alpine/v3.22/main/x86_64/APKINDEX.tar.gz
WARNING: fetching https://dl-cdn.alpinelinux.org/alpine/v3.22/main: Permission denied
fetch https://dl-cdn.alpinelinux.org/alpine/v3.22/community/x86_64/APKINDEX.tar.gz
ERROR: unable to select packages:
  build-base (no such package):
    required by: world[build-base]
  clang (no such package):
    required by: world[clang]
  cmake (no such package):
    required by: world[cmake]
  git (no such package):
    required by: world[git]
  llvm (no such package):
    required by: world[llvm]
  libpq-dev (no such package):
    required by: postgresql15-dev-15.14-r0[libpq-dev]
  libecpg-dev (no such package):
    required by: postgresql15-dev-15.14-r0[libecpg-dev]
  clang16 (no such package):
    required by: postgresql15-dev-15.14-r0[clang16]
  icu-dev (no such package):
    required by: postgresql15-dev-15.14-r0[icu-dev]
  llvm16 (no such package):
    required by: postgresql15-dev-15.14-r0[llvm16]
  lz4-dev (no such package):
    required by: postgresql15-dev-15.14-r0[lz4-dev]
  openssl-dev (no such package):
    required by: postgresql15-dev-15.14-r0[openssl-dev]
  zstd-dev (no such package):
    required by: postgresql15-dev-15.14-r0[zstd-dev]
  so:libpq.so.5 (no such package):
    required by: postgresql15-dev-15.14-r0[so:libpq.so.5]

遇到上述情况则请更新 Alpine 仓库镜像源。

# 备份原有源
cp /etc/apk/repositories /etc/apk/repositories.bak

# 使用国内镜像源(如果在中国)
echo "https://mirrors.aliyun.com/alpine/v3.22/main" > /etc/apk/repositories
echo "https://mirrors.aliyun.com/alpine/v3.22/community" >> /etc/apk/repositories

# 或者使用官方源(确保网络可达)
echo "https://dl-cdn.alpinelinux.org/alpine/v3.22/main" > /etc/apk/repositories
echo "https://dl-cdn.alpinelinux.org/alpine/v3.22/community" >> /etc/apk/repositories

2. 获取 pgvector 源码

# 克隆 pgvector 仓库
git clone --branch v0.8.1 https://github.com/pgvector/pgvector.git
cd pgvector

3. 解决版本兼容性问题

# 创建 clang 符号链接
ln -sf /usr/bin/clang /usr/bin/clang-19
ln -sf /usr/bin/clang++ /usr/bin/clang++-19

# 创建 LLVM 目录结构
mkdir -p /usr/lib/llvm19/bin

# 创建 llvm-lto 和其他工具的符号链接
ln -sf /usr/lib/llvm20/bin/llvm-lto /usr/lib/llvm19/bin/llvm-lto
ln -sf /usr/lib/llvm20/bin/llvm-config /usr/lib/llvm19/bin/llvm-config
ln -sf /usr/lib/llvm20/bin/llvm-dis /usr/lib/llvm19/bin/llvm-dis
ln -sf /usr/lib/llvm20/bin/llvm-ar /usr/lib/llvm19/bin/llvm-ar

4. 编译和安装

# 编译 pgvector
make

# 安装 pgvector
make install

验证结果

测试SQL

-- 创建扩展
CREATE EXTENSION vector;

-- 测试向量类型
SELECT '[1,2,3]'::vector;

-- 创建测试表
CREATE TABLE items (
    id BIGSERIAL PRIMARY KEY,
    name TEXT,
    embedding vector(3)
);

-- 插入测试数据
INSERT INTO items (name, embedding) VALUES 
    ('item1', '[1,1,1]'),
    ('item2', '[2,2,2]'),
    ('item3', '[3,3,3]');

-- 测试相似性搜索
SELECT 
    id,
    name,
    embedding,
    embedding <-> '[1,1,1]' as distance
FROM items 
ORDER BY embedding <-> '[1,1,1]' 
LIMIT 3;

预期结果

CREATE EXTENSION

 vector
---------
 [1,2,3]
(1 row)

CREATE TABLE

INSERT 0 3

 id | name  | embedding |      distance
----+-------+-----------+--------------------
  1 | item1 | [1,1,1]   |                  0
  2 | item2 | [2,2,2]   | 1.7320508075688772
  3 | item3 | [3,3,3]   | 3.4641016151377544
(3 rows)