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';
建表语句(这个就是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 |
指定认证方式(如 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
,移除不必要的开放规则。这里依旧要在终端连接到数据库的超级用户操作
参考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 要求版本映射必须满足以下条件:
comment
, default_version
)之后版本号 = '脚本文件名'
修改后的 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'
使用以下命令检查文件格式是否正确:
# 查看文件内容(包含行号)
cat -n /www/server/pgsql/share/extension/hstore.control
确保:
1.8 = ...
)前面有一个空行修改后,尝试重新创建扩展:
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 的仓库链接失败。以下是最新的解决方案,通过手动配置仓库文件来解决这个问题:
sudo rm -f /etc/yum.repos.d/pgdg*.repo
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
# 清除旧缓存
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
sudo yum install postgresql16-contrib
# 检查 hstore.so 是否存在
ls /usr/pgsql-16/lib/hstore.so
# 检查控制文件是否存在
ls /usr/pgsql-16/share/extension/hstore.control
# 删除旧的符号链接
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/
sudo systemctl restart postgresql
psql -U postgres -c "CREATE EXTENSION hstore;"
yum
报错。$releasever
)被错误解析为 3
。rhel-8
,避免系统自动识别版本导致的错误。如果问题仍然存在,请提供 yum repolist
和 ls -l /usr/pgsql-16/lib/hstore.so
的输出结果,以便进一步诊断。