已浏览 1995 次

向量数据库:PostgreSQL之pgvector插件插件

向量库是AI本地化部署的核心支撑,它能将大模型生成的向量数据存储在本地,避免数据外发风险,同时大幅降低语义搜索、个性化推荐等场景的响应延迟,让AI应用在离线环境也能高效运行。

PostgreSQL的PGVector插件凭借原生集成优势,成为本地化向量存储的优选方案。它无需额外搭建独立向量数据库,直接复用PostgreSQL的ACID事务、权限控制等成熟能力,实现向量数据与业务数据的统一管理。同时支持IVFFlat、HNSW等高效索引算法,能在保证搜索精度的前提下,处理百万级高维向量数据,显著降低AI本地化的部署成本与运维复杂度。

一、PostgreSQL Vector在Windows的安装

参考资料:https://juejin.cn/post/7517955159005659155

  1. 在git上下载pgvector

https://github.com/pgvector/pgvector

选择符合PostgreSQL版本的pgvector,比如PostgreSQL14可以使用0.6.2的pgvector 可以在命令窗口使用以下命令下载对应tag的版本。(记得先切换目录)安装过程可以参考其readme.md文档

git clone –branch v0.6.2 https://github.com/pgvector/pgvector.git

  1. 安装Visual Studio 2022(勾选C++ 桌面开发

从Visual Studio官网下载安装文件点击安装,选择 C++ 桌面开发 ,主要勾选以下两个组件

  1. 安装完成后,在”开始”搜索栏搜索 “x64 Native Tools Command Prompt for VS”, 然后右键使用管理者身份运行

在其中切换目录到pgvector目录,然后依次执行: set “PGROOT=C:\Program Files\PostgreSQL\14” //根据PostgreSQL安装目录调整。目录截止到包含include文件夹

nmake /F Makefile.win

nmake /F Makefile.win install

  1. PostgreSQL 设定pgvector

SELECT * FROM pg_available_extensions WHERE name=’vector’; // 查询pgvector是否可用

CREATE EXTENSION IF NOT EXISTS vector;// 启用 pgvector

SELECT * FROM pg_extension WHERE extname=’vector’; // 查询启用结果,能查到pgvector版本即安装成功

若是LangChain4j处理复杂元数据,则需启用了hstoreuuid-ossp扩展:

CREATE EXTENSION IF NOT EXISTS hstore;

CREATE EXTENSION IF NOT EXISTS “uuid-ossp”;

PostgreSQL 常用命令:

查看PostgreSQL版号信息:select version();

检测pgvector扩展版本:SELECT * FROM pg_extension WHERE extname = ‘vector’;

二、PostgreSQL在Docker的安装:

PostgreSQL:安装在docker容器中,0

安装参数如下:

docker run -d \

–name postgres-pgvector \

-p 5432:5432 \

-e POSTGRES_USER=postgres \

-e POSTGRES_PASSWORD=password\

-e POSTGRES_DB=databasename\

-v pgdata:/var/lib/postgresql/data \

–restart=unless-stopped \

postgres:16

进入到指定容器:

docker exec -it postgres-pgvector bash

查看容器:docker ps -a

重启容器:docker restart 容器名

查看容器日志:docker logs 容器名

远程连接数据库:

psql -h localhost -p 5432 -U postgres -d databasename

密码为 password

创建新数据库:

CREATE DATABASE databasename WITH ENCODING ‘utf8’ TEMPLATE template0 LC_COLLATE ‘en_US.UTF-8’ LC_CTYPE ‘en_US.UTF-8’;

创建用户: CREATE USER username WITH ENCRYPTED PASSWORD ‘password’ SUPERUSER;