宝塔下载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适配spring ai_第1张图片

版本: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,  -- 匹配插入语句中的 UUID 类型主键
    content TEXT NOT NULL,  -- 存储长文本内容,非空
    metadata JSONB,  -- 存储 JSON 格式的元数据(如分类、标题等)
    embedding VECTOR  -- 存储向量数据(数组类型,匹配插入的浮点型数组)
);


要想利用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 指定认证方式(如 md5passwordtrustscram-sha-256 等)。

常见场景示例

  1. 允许所有用户连接所有数据库

    host all all 0.0.0.0/0 md5
    
  2. 仅允许 admin 用户连接 mydb 数据库

    host mydb admin 192.168.1.0/24 md5
    
  3. 允许本地用户通过 Unix 套接字连接所有数据库

    local all all trust
    

安全建议

  • 生产环境慎用 0.0.0.0/0:开放所有 IP 可能带来安全风险,建议使用更严格的 IP 范围(如 192.168.1.0/24)。
  • 使用强密码:配合 md5scram-sha-256 认证时,确保用户密码足够复杂。
  • 定期审计配置:定期检查 pg_hba.conf,移除不必要的开放规则。

3.PostgreSQL缺失hstore扩展

1.检查

这里依旧要在终端连接到数据库的超级用户操作

参考PostgreSQL 缺失hstore扩展|极客教程

SELECT * FROM pg_available_extensions WHERE name = 'hstore';

没有的话执行下面操作

/q  ---退出数据库连接
明确系统版本
cat /etc/redhat-release
----安装
# 对于CentOS/RHEL系统
# 对于 CentOS 7 / RHEL 7
sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 对于 CentOS 8 / RHEL 8
sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 对于 CentOS Stream 9 / RHEL 9
sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
ali的liux3

# 对于Ubuntu/Debian系统
sudo apt-get install postgresql-contrib

# 对于macOS (Homebrew)
brew install postgresql-contrib


之后重启

重启之后
cd /tmp
cd pgvector
export PG_CONFIG=/www/server/pgsql/bin/pg_config
export PATH=$PATH:/www/server/pgsql/bin/
sudo find / -name "hstore.control" 2>/dev/null ---找到包路径
例如:/usr/local/pgsql/contrib/hstore/hstore.control
/usr/share/pgsql/extension/hstore.control

之后查看当前 PostgreSQL 默认的扩展目录
默认:/www/server/pgsql/share

软连接(这里是两次查询的目录,你要对应自己的)
---在刚刚启动的终端的情况下用
sudo ln -s /usr/local/pgsql/contrib/hstore/hstore.control /www/server/pgsql/share/extension/
sudo ln -s /usr/local/pgsql/contrib/hstore/hstore--1.7.sql /www/server/pgsql/share/extension/
sudo ln -s /usr/local/pgsql/contrib/hstore/hstore--unpackaged--1.7.sql /www/server/pgsql/share/extension/


再重启

cd /tmp
cd pgvector
export PG_CONFIG=/www/server/pgsql/bin/pg_config
export PATH=$PATH:/www/server/pgsql/bin/
psql -h localhost -p 5432 -U postgres
CREATE EXTENSION hstore;

如果失败
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.control 文件的语法格式上。PostgreSQL 对 .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 要求版本映射必须满足以下条件:

  1. 必须位于所有元数据定义(如 comment, default_version之后
  2. 必须与前面的内容用空行分隔
  3. 格式必须严格为 版本号 = '脚本文件名'

解决方案

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;

常见错误排查

  1. 隐藏字符问题

    # 使用 hexdump 查看文件的二进制表示,检查是否有隐藏字符
    hexdump -C /www/server/pgsql/share/extension/hstore.control | head -n 10
    

    确保没有非预期的字符(如 \r 或其他不可见字符)

  2. 文件编码问题

    # 检查文件编码
    file -i /www/server/pgsql/share/extension/hstore.control
    

    确保文件是 utf-8 编码

  3. 权限问题

    # 确保文件权限正确
    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

预期输出(应只包含 pgdg16pgdg-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 repolistls -l /usr/pgsql-16/lib/hstore.so 的输出结果,以便进一步诊断。

你可能感兴趣的:(技术精讲,spring,数据库,java)