CentOS 7/8 下通过 Yum 安装 PostgreSQL 15 与 pgvector 扩展全指南

1次阅读
没有评论

共计 2097 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

背景痛点

传统编译安装 PostgreSQL 经常遇到依赖地狱问题,特别是需要集成扩展时。而随着 AI 应用爆发,直接处理向量数据的需求越来越普遍——比如推荐系统的特征匹配、NLP 的语义搜索等场景。pgvector 扩展让 PostgreSQL 原生支持向量运算,避免了维护单独向量数据库的复杂度。

CentOS 7/8 下通过 Yum 安装 PostgreSQL 15 与 pgvector 扩展全指南

技术选型

  1. 源码编译:灵活但耗时,需要手动解决所有依赖,升级维护成本高
  2. Yum 安装:分钟级部署,自动处理依赖,官方仓库保证版本兼容性

选择 PostgreSQL 官方 Yum 仓库的原因:

  • 比 EPEL 仓库更新及时
  • 提供配套的 contrib 模块
  • 长期维护的 RPM 包经过充分测试

核心实现

配置 Yum 仓库

# CentOS 7/ 8 通用命令
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm

安装 PostgreSQL 15

# 安装核心服务端和客户端
sudo yum install -y postgresql15-server postgresql15-contrib

# CentOS 7 需要手动初始化(8 会自动执行)if [$(rpm -E %{rhel}) -eq 7 ]; then
    sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
fi

# 启动服务
sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15

安装 pgvector 扩展

# 安装编译依赖
sudo yum install -y gcc make postgresql15-devel

# 下载源码(建议使用最新 release 版)wget https://github.com/pgvector/pgvector/archive/refs/tags/v0.5.1.tar.gz
tar xvf v0.5.1.tar.gz
cd pgvector-0.5.1

# 编译安装
make PG_CONFIG=/usr/pgsql-15/bin/pg_config
sudo make install PG_CONFIG=/usr/pgsql-15/bin/pg_config

关键配置

postgresql.conf 调优

# 内存分配(按服务器实际配置调整)shared_buffers = 4GB              # 通常分配 25% 内存
work_mem = 16MB                   # 每个操作的内存配额
maintenance_work_mem = 512MB      # 维护操作内存

# 向量运算相关
max_worker_processes = 8          # 并行计算进程数
max_parallel_workers_per_gather = 4 # 每个查询的并行度

数据库内启用扩展

-- 创建扩展
CREATE EXTENSION vector;

-- 创建带向量字段的表
CREATE TABLE items (
  id BIGSERIAL PRIMARY KEY,
  embedding vector(384)  -- 根据模型维度设置
);

-- 创建 HNSW 索引(适合高维向量)CREATE INDEX ON items USING hnsw (embedding vector_l2_ops);

生产建议

  1. 内存分配
  2. 监控 pg_stat_activity 避免 work_mem 溢出
  3. 大批量导入时临时增大 maintenance_work_mem

  4. 向量维度

  5. OpenAI embeddings 通常 768 维
  6. 超过 2000 维建议测试性能衰减

  7. 常见错误

  8. libstdc++.so.6: version GLIBCXX_3.4.XX not found
    sudo yum install -y libstdc++-static

验证测试

Python 测试脚本示例:

import psycopg2
import numpy as np

conn = psycopg2.connect(dbname='postgres', user='postgres')
cur = conn.cursor()

# 生成测试向量
vec1 = np.random.rand(384).tolist()
vec2 = (np.random.rand(384) * 0.5).tolist()

# 插入数据
cur.execute("INSERT INTO items (embedding) VALUES (%s), (%s)", 
           (vec1, vec2))

# 相似度查询
cur.execute("""
  SELECT id, embedding <-> %s AS distance 
  FROM items 
  ORDER BY distance LIMIT 1
""", [vec1])
print(cur.fetchall())

conn.commit()
conn.close()

思考题

当面对以下场景时,可能需要考虑专用向量数据库:
– 十亿级向量实时搜索
– 需要分布式横向扩展
– 对 ANN 算法有特殊调优需求

但 pgvector 的优势在于:
– 与业务数据天然共存
– 支持完整 ACID 事务
– 复用现有 PostgreSQL 运维体系

建议通过实际业务场景的 QPS 和召回率测试来评估是否满足需求。

正文完
 0
评论(没有评论)