PGvector实现向量存储
PGvector是为postgreSQL提供向量数据库功能的插件。
安装postgreSQL并通过idea连接
这是postgreSQL的中文社区下载页面/Download: 世界上功能最强大的开源数据库…
我们是要在linux系统上安装postgreSQL,我使用的是centos7版本。
首先需要下载源代码,运行命令:
wget https://ftp.postgresql.org/pub/source/v12.2/postgresql-12.2.tar.bz2
需要安装bzip2,没有的话执行命令
sudo yum install bzip2
解压
tar -xvf postgresql-12.2.tar.bz2
拟安装至/opt/pgsql
./configure --prefix=/opt/pgsql
如果安装失败的话可能是缺少以下文件,安装上再试一次
#安装GCC编译器
sudo yum groupinstall "Development Tools"
sudo yum install gcc glibc-devel
sudo yum install readline-devel
sudo yum install zlib-devel
执行命令查看是否正确显示版本
/opt/pgsql/bin/psql --version
🚀 后续步骤
- 编译 PostgreSQL
运行以下命令开始编译:
make # 使用 -j 参数可加速编译(如 make -j4,根据 CPU 核心数调整)
- 安装到指定目录
sudo make install # 将安装到 --prefix 指定的 /opt/pgsql
- 初始化数据库
#添加用户,官网上说会让我们设置密码但是我做的时候没有
adduser postgres
#如果你想要设置可以执行命令
sudo passwd postgres
# 创建数据目录
mkdir /opt/pgsql/data
chown -R postgres:postgres /opt/pgsql/data
#使用postgres帐号操作
su - postgres
#初始化数据库
/opt/pgsql/bin/initdb -D /opt/pgsql/data
#启动数据库
/opt/pgsql/bin/pg_ctl -D /opt/pgsql/data -l logfile start
#创建数据库,假定数据库名为gerericdb)
/opt/pgsql/bin/createdb genericdb
# (进入数据库内部)
/opt/pgsql/bin/psql genericdb
以上就完成了,常用命令可以网上查找,'\q’是退出命令
提示符 test=# 表示:
已连接到名为 test 的数据库
'#'表示你以超级用户(postgres)身份登录('$' 表示普通用户)
'#'号前的符号含义:
= 事务空闲(未开启事务) dbname=# 正常状态,可以执行新命令
+ 事务进行中(有未提交的修改) dbname+# 已执行 BEGIN 但未 COMMIT/ROLLBACK
- 事务失败(需回滚) dbname-# 事务中发生错误(如违反约束)
使用idea远程连接postgreSQL数据库
postgreSQL允许远程连接的配置步骤
- 修改
postgresql.conf
sudo nano /opt/pgsql/data/postgresql.conf
找到并修改:
listen_addresses = '你的服务器ip地址, localhost' # 添加服务器IP
port = 5432 # 确保端口一致
- 修改
pg_hba.conf
(客户端认证)
sudo nano /opt/pgsql/data/pg_hba.conf
在文件末尾添加(允许所有IP连接,生产环境应限制):
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 0.0.0.0/0 md5 # 允许所有IPv4
host all all ::0/0 md5 # 允许所有IPv6
- 重启 PostgreSQL
sudo systemctl restart postgresql
- 开放防火墙端口(CentOS/RHEL)
sudo firewall-cmd --add-port=5432/tcp --permanent #放开5432端口
sudo firewall-cmd --reload #重启规则
idea连接
database新建连接选择postgreSQL(第一次要下载依赖)
然后点Test Connection测试连接就行。
安装PGvector并创建向量数据库操作
安装PGvector插件
#进入postgreSQL的安装路径,我的是在/opt/pgsql
cd /opt/pgsql
#下载PGvector源码
git clone --branch v0.5.1 https://github.com/pgvector/pgvector.git
#进入pgvector文件
cd pgvector
#编译
make
#如果出现“make: pg_config:命令未找到”错误就执行
sudo yum install postgresql-devel
export PATH=/opt/pgsql/bin:$PATH #手动指定 pg_config 路径
#清理之前的编译尝试
make clean
#再次编译
make
#安装
sudo make install
#验证安装
ls /opt/pgsql/share/extension/vector*
#如果出现“ls: 无法访问/opt/pgsql/share/extension/vector*: 没有那个文件或目录”错误是因为 PGvector 插件被默认安装到了系统目录 /usr/lib64/pgsql/ 和 /usr/share/pgsql/extension/,迁移一下就好了
# 创建目标目录
sudo mkdir -p /opt/pgsql/{lib,share/extension}
# 转移插件文件
sudo mv /usr/lib64/pgsql/vector.so /opt/pgsql/lib/
sudo mv /usr/share/pgsql/extension/vector* /opt/pgsql/share/extension/
# 设置权限
sudo chown -R postgres:postgres /opt/pgsql/{lib,share/extension}
再次执行验证文件存在代码就没问题了
#但是现在还存在一个问题,pgvector插件的位置不能被识别到,我们需要在postgreSQL的配置文件中添加一下
sudo nano /opt/pgsql/data/postgresql.conf
#添加以下代码,保存退出
dynamic_library_path = '/opt/pgsql/lib'
shared_preload_libraries = 'vector'
# 停止PostgreSQL
sudo systemctl stop postgresql
# 删除旧插件注册
rm -f /opt/pgsql/data/pg_extension/vector*
# 重启服务
sudo systemctl start postgresql
# 重新创建扩展
sudo -u postgres /opt/pgsql/bin/psql #连接数据库
#执行以下sql
CREATE EXTENSION vector;
#验证扩展是否存在
SELECT * FROM pg_extension WHERE extname = 'vector';
这就代表成功了
测试向量数据库功能
-- 创建测试表
CREATE TABLE test_vectors (
id SERIAL PRIMARY KEY,
embedding VECTOR(3)
);
-- 插入数据
INSERT INTO test_vectors (embedding) VALUES
('[1.1, 2.2, 3.3]'),
('[4.4, 5.5, 6.6]');
-- 相似度查询
SELECT * FROM test_vectors
ORDER BY embedding <-> '[1.0, 2.0, 3.0]'
LIMIT 1;
查看插入数据
select * from test_vectors;
相似度查询结果: