前言
在 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/repositories2. 获取 pgvector 源码
# 克隆 pgvector 仓库
git clone --branch v0.8.1 https://github.com/pgvector/pgvector.git
cd pgvector3. 解决版本兼容性问题
# 创建 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-ar4. 编译和安装
# 编译 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)