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

1次阅读
没有评论

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

image.webp

背景痛点

传统方式编译安装 PostgreSQL 需要处理各种依赖,往往耗费数小时。特别是在 AI 应用中,向量数据库的重要性日益凸显,但手动编译 pgvector 扩展时,版本兼容性问题频频出现,让开发者头疼不已。

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

技术选型

源码编译虽然灵活,但维护成本高,而 Yum 安装提供了官方维护的稳定版本。PostgreSQL 15 官方仓库不仅更新及时,还提供了预编译的 contrib 模块,大幅降低了部署复杂度。

核心实现

1. 配置 PostgreSQL 15 官方 Yum 仓库

CentOS 7 和 8 的配置略有不同,以下是具体步骤:

# CentOS 7
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# CentOS 8
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

2. 安装 PostgreSQL 15 及 contrib 模块

sudo yum install -y postgresql15-server postgresql15-contrib

3. 初始化数据库

sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15

4. 编译安装 pgvector 扩展

首先安装编译依赖:

sudo yum install -y gcc make postgresql15-devel

然后下载并编译 pgvector:

git clone https://github.com/pgvector/pgvector.git
cd pgvector
make PG_CONFIG=/usr/pgsql-15/bin/pg_config
sudo make PG_CONFIG=/usr/pgsql-15/bin/pg_config install

代码示例

postgresql.conf 关键参数配置

# 内存分配
shared_buffers = 4GB                   # 25% of total RAM
work_mem = 16MB                        # per-operation memory
maintenance_work_mem = 512MB           # for index builds

# 向量相关
max_parallel_workers_per_gather = 4    # 并行查询 

创建向量字段和索引

-- 创建扩展
CREATE EXTENSION vector;

-- 创建带向量字段的表
CREATE TABLE items (
  id bigserial PRIMARY KEY,
  embedding vector(384)  -- 384 维向量
);

-- 创建 HNSW 索引
CREATE INDEX ON items USING hnsw (embedding vector_l2_ops);

生产建议

  1. 内存调优
  2. shared_buffers 建议设为总内存的 25%
  3. work_mem 根据并发量调整,避免 OOM

  4. 维度限制

  5. pgvector 支持最高 16000 维,但实际建议控制在 1024 维以内
  6. 高维数据考虑使用 PCA 降维

  7. 常见错误

  8. 遇到 libstdc++ 冲突时:
    sudo yum install -y libstdc++-static

验证环节

用 Python 测试向量搜索:

import psycopg2
import numpy as np

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

# 插入测试数据
embedding = np.random.rand(384).tolist()
cur.execute("INSERT INTO items (embedding) VALUES (%s)", (embedding,))
conn.commit()

# 相似度查询
query_vec = np.random.rand(384).tolist()
cur.execute("""
  SELECT id, embedding <=> %s AS distance
  FROM items
  ORDER BY embedding <=> %s
  LIMIT 5
""", (query_vec, query_vec))
print(cur.fetchall())

思考

pgvector 与其他专用向量数据库(如 Milvus、Pinecone)相比,在易用性和 PostgreSQL 生态集成上有优势,但在超大规模向量搜索场景下可能遇到性能瓶颈。实际选择时,需要考虑:
1. 数据规模(百万级以内 pgvector 表现良好)
2. 实时性要求(pgvector 事务支持更完善)
3. 现有技术栈(已用 PostgreSQL 可优先考虑)

建议在项目初期用 pgvector 快速验证,待数据量增长后再评估是否需要迁移到专用向量数据库。

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