宝塔PostgreSQL安装pgvecto插件contrib包实现向量存储
1. 宝塔安装
- 首先确保你的宝塔已经安装了 PostgreSQL。
安装好后是能看到上面这个界面的。
我安装的是 16.1 版本,下面的教程讲的也是 16.1 版本的。
2.开放防火墙的端口号 5432
3.允许外部访问所有数据库
4.设置超级管理员用户密码
用户名默认为:postgres
后续连接数据库可用超级用户连接
username:postgres
password:就是你刚刚设置的
2. 安装 pgvector 插件
2.1 查看安装状态
1. 首先去到控制台,输入命令连接 postgreSQL 数据库。
/www/server/pgsql/bin/psql -U postgres -h localhost -p 5432
显示 postgres=# 就是连接上了数据库,可以敲 sql 语句了。
2. 在psql命令行中,执行创建扩展的命令:
CREATE EXTENSION vector;
如果没有安装过插件就会报错。
3.验证是否安装成功:
\dx vector
如果成功,它会列出 vector 扩展的信息。如下图:
2.2 安装pgvector
下载pgvector插件:
下载地址: https://github.com/pgvector/pgvector/archive/refs/tags/v0.7.4.zip
postgresql14 对应 pgvector0.5 的版本
postgresql15 对应 pgvector0.6 的版本
postgresql15 对应 pgvector0.7 的版本
将压缩包本地解压好,去宝塔建个文件夹,直接把文件都传进去。
2.3 编译安装
进入刚刚上传文件夹的目录,准备编译安装。
# 进入你的 pgvector 源代码目录
cd /www/wwwroot/pgvector# 清理之前的编译尝试(可选,但推荐)
make clean# 使用找到的 pg_config 路径进行编译
make PG_CONFIG=/www/server/pgsql/bin/pg_config# 安装编译好的扩展(需要 root 权限)
sudo make install PG_CONFIG=/www/server/pgsql/bin/pg_config
然后重复 2.1 查看安装状态,查看是否安装成功。
2.4 设置环境变量 (建议设置)
1.找到PostgreSQL的可执行工具路径
我的 PostgreSQL 安装目录是/www/server/pgsql。这个目录下的 bin 子目录包含了所有 PostgreSQL的命令行工具,包括 psql (PostgreSQL 交互终端)和 pg-ctl (服务控制工具)。
重要工具路径:
psql:/www/server/pgsql/bin/psql(用于连接数据库和执行 SQL 命令)
pg-ctl:/www/server/pgsql/bin/pg-ctl(用于管理PostgreSQL 服务,如启动、停止)
检查工具是否存在:
ls -la /www/server/pgsql/bin/psql
ls -la /www/server/pgsql/bin/pg-ctl
如果这些文件存在(应该有可执行权限),你就可以使用它们了。
2.设置环境变量
为了方便使用,建议将 PostgreSQL 的 bin目录添加到你的 PATH 环境变量中。这样你就可以直接在命令行中输入 psql、pg-ctl 等命令,而不需要每次都输入完整路径。
#临时添加(当前终端会话有效):
export PATH=/www/server/pgsql/bin:$PATH#永久添加(推荐):
#将上面的export 命令添加到你的 shell配置文件中(如~/.bashrc 或~/.bash_profile):
echo 'export PATH=/www/server/pgsql/bin:$PATH' >> ~/.bashrc
Source ~/.bashrc#验证路径是否设置成功:
which psql
# 应该输出: /www/server/pgsql/bin/psql
3.使用psql 连接到 PostgreSQL 数据库
psql 是 PostgreSQL 的交互式终端程序,允许执行 SQL 命令和管理数据库。
以postgres用户连接到数据库:
#使用完整路径(如果未设置PATH)
/www/server/pgsql/bin/psql -U postgres -h localhost -p 5432#或者如果已设置PATH
psql -U postgres -h localhost -p 5432
说明:
- -U postgres:指定用户名(PostgreSQL 的默认超级用户通常叫postgres)
- -h localhost:指定主机 (这里连接本地数据库)
- -p 5432:指定端口(PostgreSQL 默认端口是54321,如果你的配置不同请修改)
如果连接失败:
- 权限问题:检查/www/server/pgsql/data/pg_hba.conf 文件,确保有允许 postgres 用户从本地连接的配置。
- 端口问题:确认你的 PostgreSQL 实际监听端口
(检查/www/server/pgsql/data/postgresql.conf 中的 port 设置)。
4.在数据库中启用pgvector扩展
成功连接to PostgreSQL 后,你会看到提示符变为postgres=#,这表示你现在可以执行 SQL 命令。
创建并启用扩展:
-- 启用 vector 扩展
CREATE EXTENSION vector;-- 验证扩展是否安装成功
\dx vector
3.解决PostgreSQL中“vector"类型不存在的问题
问题原因分析
扩展已安装但未启用:PostgreSQL 扩展需要在每个要使用它的数据库中单独创建。即使服务器层面安装了 pgvector,不执行 CREATE EXTENSION 命令,当前数据库也无法识别vector 数据类型。
权限问题:当前数据库用户可能没有创建扩展的权限。
搜索路径问题:扩展可能安装在了非默认模式(schema)下,而该模式不在你的search_path中。
解决方法:
步骤1:连接到你的数据库并创建扩展
使用有权限的用户(如postgres或具有超级用户权限的用户)连接到你需要使用vector 数据类型的数据库,然后执行以下 SQL 命令:
-- 连接到你的数据库后,执行以下命令创建扩展
CREATE EXTENSION IF NOT EXISTS vector;
步骤2:验证扩展是否创建成功
创建扩展后,可以通过以下命令验证是否成功:
-- 查看当前数据库已安装的扩展列表,检查 vector 是否在列
\dx-- 或者查询扩展详情
SELECT * FROM pg_extension WHERE extname = 'vector';
4.解决 Spring AI PgVectorStore 的 hstore 扩展问题
错误信息显示:
ERROR: extension "hstore" is not available
详细:Could not open extension control file "/www/server/pgsql/share/extension/hstore.control": No such file or directory.
建议:The extension must first be installed on the system where PostgreSQL is running.
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">hstore</font>
是 PostgreSQL 的一个扩展,用于存储键值对数据。Spring AI 的 PgVectorStore 依赖这个扩展来存储元数据。
安装 hstore 扩展
安装 PostgreSQL contrib 包(包含 hstore 扩展):
指定版本(假设你使用的是 PostgreSQL 16)
sudo yum install postgresql16-contrib
让 PostgreSQL 找到 hstore 扩展
手动将 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">contrib</font>
包提供的扩展文件复制或链接到 PostgreSQL 的搜索路径中。
步骤 1: 查找 hstore 扩展文件的位置
首先,我们需要找到 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">postgresql16-contrib</font>
包安装后,<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">hstore</font>
扩展文件实际存放的位置。
使用 find 命令搜索:
在终端中执行以下命令,搜索 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">hstore.control</font>
文件:
- bashsudo find / -name “hstore.control” 2>/dev/null
或者更精确地搜索 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">contrib</font>
相关的目录:
- bashsudo find /usr -path “/contrib/” -name “hstore.control” 2>/dev/null
- 检查常见的安装路径:
根据 OpenCloudOS 和 PostgreSQL 的常见安装路径,<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">hstore.control</font>
文件很可能在以下位置之一:<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">/usr/share/pgsql/extension/hstore.control</font>
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">/usr/share/postgresql16/extension/hstore.control</font>
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">/usr/pgsql-16/share/extension/hstore.control</font>
步骤 2: 将扩展文件链接到 PostgreSQL 目录
找到 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">hstore.control</font>
文件及其同目录下的相关文件(通常是 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">.sql</font>
和 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">.so</font>
文件)后,您有两种方法让 PostgreSQL 找到它们:
创建符号链接(推荐,更灵活)
假设您找到的路径是 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">/usr/share/pgsql/extension/hstore.control</font>
:
# 创建扩展目录(如果不存在)
sudo mkdir -p /www/server/pgsql/share/extension/# 为 hstore.control 创建符号链接
sudo ln -s /usr/share/pgsql/extension/hstore.control /www/server/pgsql/share/extension/hstore.control# 为 hstore--1.x.sql 文件创建符号链接(请替换 x 为实际版本号,或用通配符)
sudo ln -s /usr/share/pgsql/extension/hstore--1*.sql /www/server/pgsql/share/extension/# 为 hstore.so 共享库创建符号链接(库文件可能在 lib 目录下)
# 先找到 hstore.so 文件
sudo find / -name "hstore.so" 2>/dev/null
# 假设找到的路径是 /usr/lib64/pgsql/hstore.so
sudo ln -s /usr/lib64/pgsql/hstore.so /www/server/pgsql/lib/hstore.so
步骤 3: 设置文件权限
确保 PostgreSQL 用户(通常是 <font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">postgres</font>
)有权限读取这些文件:
bash
sudo chown postgres:postgres /www/server/pgsql/share/extension/hstore.*
sudo chmod 644 /www/server/pgsql/share/extension/hstore.*
sudo chown postgres:postgres /www/server/pgsql/lib/hstore.so
sudo chmod 755 /www/server/pgsql/lib/hstore.so
步骤 4: 重启 PostgreSQL 服务并启用扩展
完成文件链接或复制后,重启 PostgreSQL 服务以使更改生效,然后启用扩展:
先手动去宝塔面板重启 PostgreSQL 服务
# 连接到 PostgreSQL
psql -U postgres -h localhost# 在 psql 中创建扩展
CREATE EXTENSION hstore;# 验证扩展是否安装成功
\dx hstore
最后确认一下 PostgreSQL 配置文件有没有问题:
5.PostgreSQL 数据库中缺少 uuid-ossp 扩展
- 创建符号链接
# 为扩展控制文件和SQL文件创建符号链接
sudo ln -s /usr/share/pgsql/extension/uuid-ossp.control /www/server/pgsql/share/extension/
sudo ln -s /usr/share/pgsql/extension/uuid-ossp--1.0--1.1.sql /www/server/pgsql/share/extension/
sudo ln -s /usr/share/pgsql/extension/uuid-ossp--1.1.sql /www/server/pgsql/share/extension/# 为共享库文件创建符号链接
sudo ln -s /usr/lib64/pgsql/uuid-ossp.so /www/server/pgsql/lib/
- 验证符号链接:
ls -la /www/server/pgsql/share/extension/uuid-ossp*
ls -la /www/server/pgsql/lib/uuid-ossp.so
3.重启 PostgreSQL 服务(手动)
4.在 PostgreSQL 中创建扩展
CREATE EXTENSION "uuid-ossp";