宝塔下载pgsql适配spring ai
1.宝塔安装pgvector
1.先去github下载pgvectorpgvector/pgvector: Open-source vector similarity search for Postgres
2.把压缩包上传到系统文件的/temp下解压,重命名文件名为pgvector,之后命令操作
cd /tmp
cd pgvector
export PG_CONFIG=/www/server/pgsql/bin/pg_config
export PATH=$PATH:/www/server/pgsql/bin/
make
make install
psql -h localhost -p 5432 -U postgres
CREATE EXTENSION vector
版本:pgsql:16.1 pgvector:0.8
参考博客:宝塔安装pgvector - 时空云博客(这个博客命令少了一部分,不适用宝塔没有安装git的人)
验证
cd /tmp/pgvector
export PG_CONFIG=/www/server/pgsql/bin/pg_config
export PATH=$PATH:/www/server/pgsql/bin/
psql -h localhost -p 5432 -U postgres
SELECT * FROM pg_extension WHERE extname = 'vector';
2.向量数据库的创建
建表语句(这个就是spring ai Alibaba的)
CREATE TABLE IF NOT EXISTS public.vector_store (id UUID PRIMARY KEY,content TEXT NOT NULL,metadata JSONB,embedding VECTOR(1536) -- 指定向量维度为 1536
);
要想利用navicat在宝塔上面创建成功必须要进行几步操作,第一你的数据库必须有建表权限,你自己创建的数据库是没有这个权限的,所以利用宝塔pg管理自带的数据库postgres在软件商店找到那个管理工具进去点击可以看到postgres的密码
之后要在客户端认证上面加入这么一段
host postgres postgres 0.0.0.0 md5 112.193.223.128/32
在 pg_hba.conf
配置中,规则的字段顺序是 type database user address method
。针对你的配置:
host postgres postgres 0.0.0.0/0 md5
- 第一个
postgres
是 数据库名,表示允许连接到名为postgres
的数据库。 - 第二个
postgres
是 用户名,表示允许使用postgres
用户进行连接。
详细说明
字段位置 | 含义 | 示例值 | 说明 |
---|---|---|---|
1 | 连接类型 (type ) | host | 表示通过 TCP/IP 进行的非本地连接(区别于 local 表示 Unix 套接字连接)。 |
2 | 数据库名 (database ) | postgres | 指定允许连接的数据库名称。可以是具体数据库名、all (所有数据库)、sameuser (与客户端相同的用户名)等。 |
3 | 用户名 (user ) | postgres | 指定允许连接的用户名。可以是具体用户名、all (所有用户),或使用组名(以 + 开头)。 |
4 | IP 地址段 (address ) | 0.0.0.0/0 | 指定允许连接的客户端 IP 范围。0.0.0.0/0 表示所有 IPv4 地址,::/0 表示所有 IPv6 地址。 |
5 | 认证方法 (method ) | md5 | 指定认证方式(如 md5 、password 、trust 、scram-sha-256 等)。 |
常见场景示例
-
允许所有用户连接所有数据库:
host all all 0.0.0.0/0 md5
-
仅允许
admin
用户连接mydb
数据库:host mydb admin 192.168.1.0/24 md5
-
允许本地用户通过 Unix 套接字连接所有数据库:
local all all trust
安全建议
- 生产环境慎用
0.0.0.0/0
:开放所有 IP 可能带来安全风险,建议使用更严格的 IP 范围(如192.168.1.0/24
)。 - 使用强密码:配合
md5
或scram-sha-256
认证时,确保用户密码足够复杂。 - 定期审计配置:定期检查
pg_hba.conf
,移除不必要的开放规则。
3.PostgreSQL缺失hstore扩展
1.检查
这里依旧要在终端连接到数据库的超级用户操作
参考PostgreSQL 缺失hstore扩展|极客教程
SELECT * FROM pg_available_extensions WHERE name = 'hstore';
没有的话执行下面操作
/q ---退出数据库连接明确系统版本
cat /etc/redhat-release----安装
sudo yum install -y postgresql16-contrib---注意查看连接有没有失效(https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-8-x86_64/)
wget https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-8-x86_64/postgresql16-contrib-16.1-1PGDG.rhel8.x86_64.rpmsudo yum localinstall postgresql16-contrib-16.0-1PGDG.rhel8.x86_64.rpm -y# 复制 hstore 控制文件和脚本到数据库实际扩展目录
sudo cp /usr/pgsql-16/share/extension/hstore.control /www/server/pgsql/share/extension/
sudo cp /usr/pgsql-16/share/extension/hstore--*.sql /www/server/pgsql/share/extension/# 复制 hstore 库文件到数据库 lib 目录
sudo cp /usr/pgsql-16/lib/hstore.so /www/server/pgsql/lib/# 登录数据库
psql -U postgres -h localhost -p 5432CREATE EXTENSION hstore;
根据您提供的错误信息,问题仍然出在 hstore.control
文件的语法格式上。PostgreSQL 对 .control
文件的结构有严格要求,特别是版本映射部分。
4.PostgreSQL 无法找到 uuid-ossp 扩展的控制文件
# 检查系统默认路径下是否有 uuid-ossp 控制文件
ls /usr/pgsql-16/share/extension/uuid-ossp.control
# 复制 uuid-ossp 控制文件和脚本到数据库路径
sudo cp /usr/pgsql-16/share/extension/uuid-ossp.control /www/server/pgsql/share/extension/
sudo cp /usr/pgsql-16/share/extension/uuid-ossp--*.sql /www/server/pgsql/share/extension/# 复制库文件
sudo cp /usr/pgsql-16/lib/uuid-ossp.so /www/server/pgsql/lib/
sudo systemctl restart postgresql-16.service
psql -U postgres -h localhost -p 5432
CREATE EXTENSION "uuid-ossp"
博主也是狠狠拿下了这个难题太不容易了
问题分析
我实操的一些错误,需要可以看看。
如果失败
ls -l /www/server/pgsql/share/extension/hstore.control ---查看你现有文件或链接如果需要重新创建链接,可以使用 -f 选项覆盖现有文件
sudo ln -sf /usr/local/pgsql/contrib/hstore/hstore.control /www/server/pgsql/share/extension/
sudo ln -sf /usr/local/pgsql/contrib/hstore/hstore--1.7--1.8.sql /www/server/pgsql/share/extension/
sudo ln -sf /usr/local/pgsql/contrib/hstore/hstore--1.8.sql /www/server/pgsql/share/extension/确认扩展目录中的文件完整性
确保所有必要的 hstore 文件都已正确链接:
ls -l /www/server/pgsql/share/extension/hstore*错误的话删除
sudo unlink /www/server/pgsql/share/extension/hstore--1.0.sql
sudo unlink /www/server/pgsql/share/extension/hstore--1.7.sql
sudo unlink /www/server/pgsql/share/extension/hstore--unpackaged--1.0.sql
sudo unlink /www/server/pgsql/share/extension/hstore--unpackaged--1.7.sql
sudo unlink /www/server/pgsql/share/extension/hstore--1.8.sql缺少扩展版本
# 创建 hstore--1.8.sql 文件(复制自 1.7 版本)
sudo cp /usr/local/pgsql/contrib/hstore/hstore--1.7.sql \/usr/local/pgsql/contrib/hstore/hstore--1.8.sql# 更新 hstore.control 文件,添加对 1.8 版本的支持
sudo bash -c "cat >> /www/server/pgsql/share/extension/hstore.control" << EOF
1.8 = 'hstore--1.8.sql'
EOF(这里重复定义后面会报错,去对应的文件夹下/www/server/pgsql/share/extension/将hstore.control文件的重复定义删除了)
您的文件目前结构可能类似:
# hstore extension
comment = 'data type for storing sets of (key, value) pairs'
default_version = '1.8'
module_pathname = '$libdir/hstore'
relocatable = true
trusted = true# 版本映射(必须放在元数据之后,用空行分隔)
1.8 = 'hstore--1.8.sql' # 第9行(错误行)
PostgreSQL 要求版本映射必须满足以下条件:
- 必须位于所有元数据定义(如
comment
,default_version
)之后 - 必须与前面的内容用空行分隔
- 格式必须严格为
版本号 = '脚本文件名'
解决方案
1. 确保版本映射位于文件末尾
修改后的 hstore.control
应如下:
# hstore extension
comment = 'data type for storing sets of (key, value) pairs'
default_version = '1.8'
module_pathname = '$libdir/hstore'
relocatable = true
trusted = true# 版本映射(必须用空行与元数据分隔)
1.0 = 'hstore--1.0.sql' # 如果需要支持旧版本
1.8 = 'hstore--1.8.sql'
2. 验证文件格式
使用以下命令检查文件格式是否正确:
# 查看文件内容(包含行号)
cat -n /www/server/pgsql/share/extension/hstore.control
确保:
- 版本映射部分(
1.8 = ...
)前面有一个空行 - 没有多余的空格或特殊字符
- 等号两边有空格(或无空格,但格式统一)
3. 重新创建扩展
修改后,尝试重新创建扩展:
DROP EXTENSION IF EXISTS hstore;
CREATE EXTENSION hstore;
常见错误排查
-
隐藏字符问题:
# 使用 hexdump 查看文件的二进制表示,检查是否有隐藏字符 hexdump -C /www/server/pgsql/share/extension/hstore.control | head -n 10
确保没有非预期的字符(如
\r
或其他不可见字符) -
文件编码问题:
# 检查文件编码 file -i /www/server/pgsql/share/extension/hstore.control
确保文件是
utf-8
编码 -
权限问题:
# 确保文件权限正确 ls -l /www/server/pgsql/share/extension/hstore.control # 输出应类似:-rw-r--r-- 1 root root ...
如果问题仍然存在,请提供完整的 hstore.control
文件内容(包括行号),以便进一步诊断。
看起来 PostgreSQL 官方仓库的路径发生了变化,导致直接访问 RHEL 8 的仓库链接失败。以下是最新的解决方案,通过手动配置仓库文件来解决这个问题:
根据您的错误信息,系统中存在多个重复的 PostgreSQL 仓库配置,并且错误地引入了 RHEL 3 的仓库(这是一个非常古老的版本,与您的系统不兼容)。以下是解决步骤:
解决方案
1. 删除所有 PostgreSQL 仓库配置
sudo rm -f /etc/yum.repos.d/pgdg*.repo
2. 创建正确的 PostgreSQL 16 仓库配置
sudo vi /etc/yum.repos.d/pgdg.repo
添加以下内容(仅保留必要的仓库,避免重复):
[pgdg16]
name=PostgreSQL 16 for RHEL 8/CentOS 8 - x86_64
baseurl=https://download.postgresql.org/pub/repos/yum/16/redhat/rhel-8-$basearch
enabled=1
gpgcheck=1
gpgkey=https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG-16[pgdg-common]
name=PostgreSQL common RPMs for RHEL 8/CentOS 8 - x86_64
baseurl=https://download.postgresql.org/pub/repos/yum/common/redhat/rhel-8-$basearch
enabled=1
gpgcheck=1
gpgkey=https://download.postgresql.org/pub/repos/yum/RPM-GPG-KEY-PGDG
3. 清理缓存并验证仓库
# 清除旧缓存
sudo yum clean all
sudo rm -rf /var/cache/yum# 验证仓库列表(确保没有重复或错误的仓库)
sudo yum repolist
预期输出(应只包含 pgdg16
和 pgdg-common
,且无 RHEL 3 相关仓库):
repo id repo name
alinux3-os Alibaba Cloud Linux 3 - OS
alinux3-updates Alibaba Cloud Linux 3 - Updates
...
pgdg16 PostgreSQL 16 for RHEL 8/CentOS 8 - x86_64
pgdg-common PostgreSQL common RPMs for RHEL 8/CentOS 8 - x86_64
4. 安装 PostgreSQL 16 扩展包
sudo yum install postgresql16-contrib
5. 验证 hstore 扩展文件
# 检查 hstore.so 是否存在
ls /usr/pgsql-16/lib/hstore.so# 检查控制文件是否存在
ls /usr/pgsql-16/share/extension/hstore.control
6. 修复符号链接
# 删除旧的符号链接
sudo rm -f /www/server/pgsql/share/extension/hstore*# 创建新的符号链接
sudo ln -s /usr/pgsql-16/share/extension/hstore.control /www/server/pgsql/share/extension/
sudo ln -s /usr/pgsql-16/share/extension/hstore--1.8.sql /www/server/pgsql/share/extension/
sudo ln -s /usr/pgsql-16/lib/hstore.so /www/server/pgsql/lib/
7. 重启 PostgreSQL 并验证扩展
sudo systemctl restart postgresql
psql -U postgres -c "CREATE EXTENSION hstore;"
关键说明
- 重复仓库问题:之前的操作可能多次添加了相同的仓库,导致
yum
报错。 - RHEL 3 仓库错误:系统错误地尝试访问 RHEL 3 的仓库,这是由于仓库配置中的版本变量(如
$releasever
)被错误解析为3
。 - 手动指定 RHEL 8:通过在仓库配置中直接使用
rhel-8
,避免系统自动识别版本导致的错误。
如果问题仍然存在,请提供 yum repolist
和 ls -l /usr/pgsql-16/lib/hstore.so
的输出结果,以便进一步诊断。