Refinex DevHubRefinex DevHub
DocsBlogProjectsSitesChangelogAbout
Assistant
你好,我可以基于当前页面内容回答问题、提炼重点,或者告诉你下一步应该继续读什么。
  1. Docs›
  2. PostgreSQL 安装指南
Overview
Nginx 安装指南
Docker 安装指南
Python 安装指南
Nacos 安装指南
Redis 安装指南
MySQL 安装指南
Maven 安装指南
RocketMQ 安装指南
Homebrew 安装指南
PostgreSQL 安装指南
  1. Docs›
  2. PostgreSQL 安装指南

PostgreSQL 安装指南

PostgreSQL 关系型数据库 + pgvector 向量扩展的权威安装指南。涵盖 Linux(CentOS Stream 9)、macOS(Apple Silicon)、Windows 三大平台,包含 pgvector 向量数据库扩展安装与 Spring AI 集成配置。

基于 PostgreSQL 官方文档(postgresql.org)及 pgvector 官方仓库(github.com/pgvector),最后更新:2026-04

版本选择

本指南以 PostgreSQL 16(当前稳定版,EOL 2028-11)为主线。pgvector 0.8.x 支持 PostgreSQL 13–17。PostgreSQL 16 + pgvector 是 Spring AI 1.1.x PGVectorStore 的推荐组合。

Windows 支持确认

PostgreSQL 完整支持 Windows。官方提供 EDB 图形安装器(MSI)和 ZIP 免安装包,pgvector 也可通过预编译包或源码编译在 Windows 上安装。

一、Linux 安装(CentOS Stream 9)

1.1 环境信息

项目值
发行版CentOS Stream 9(RHEL 系,兼容 rhel fedora)
内核5.15.120-5.ve2.x86_64
架构x86_64
包管理器dnf(YUM 的继任)
Tip

PostgreSQL Global Development Group(PGDG)维护官方 Yum 仓库,明确支持 RHEL 9 / CentOS Stream 9 / Rocky Linux 9 / AlmaLinux 9。CentOS Stream 9 AppStream 默认提供 PostgreSQL 13,使用 PGDG 仓库可获取 16。

1.2 前置条件

  • 具有 sudo 或 root 权限的用户
  • 活跃的网络连接
  • 系统已执行 dnf update 保持最新
  • 内核版本 ≥ 3.10(当前 5.15 远超要求)

1.3 卸载旧版本与冲突包

CentOS Stream 9 AppStream 默认包含 PostgreSQL 13。安装 PGDG 版本前需禁用内置模块:

Bash
# 禁用 CentOS 内置的 PostgreSQL 模块(避免版本冲突)
sudo dnf module disable postgresql -y
​
# 卸载旧版 PostgreSQL(如有)
sudo dnf remove -y postgresql-server postgresql
Warning

如果之前有 PostgreSQL 数据需要保留,请先备份 /var/lib/pgsql/ 目录,再执行卸载操作。

1.4 安装 PostgreSQL 16(推荐:PGDG 官方仓库)

Step 1:安装 PGDG 官方 Yum 仓库

Bash
# 安装 PostgreSQL 16 官方仓库 RPM
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
仓库说明
  • pgdg-redhat-repo-latest — PGDG 统一仓库配置包,包含 PostgreSQL 13–17 所有版本
  • EL-9 — 适用于 Enterprise Linux 9(CentOS Stream 9 / RHEL 9)
  • 安装后在 /etc/yum.repos.d/ 下创建 pgdg-redhat-all.repo

Step 2:安装 PostgreSQL 16 Server

Bash
# 安装 PostgreSQL 16 服务端和客户端
sudo dnf install -y postgresql16-server postgresql16 postgresql16-contrib

各包说明:

包名说明
postgresql16-serverPostgreSQL 16 服务端守护进程(postgres)
postgresql16PostgreSQL 16 客户端工具(psql、pg_dump 等)
postgresql16-contrib附加模块和扩展(hstore、uuid-ossp、pg_stat_statements 等,Spring AI 需要 hstore 和 uuid-ossp)

Step 3:初始化数据库集群

Bash
# 初始化数据目录(默认 /var/lib/pgsql/16/data/)
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
Tip

initdb 创建数据目录结构、默认配置文件(postgresql.conf、pg_hba.conf)和系统表。此步骤仅需执行一次。

Step 4:启动并设置开机自启

Bash
# 启动 PostgreSQL 服务
sudo systemctl start postgresql-16
​
# 设置开机自动启动
sudo systemctl enable postgresql-16
​
# 验证运行状态
sudo systemctl status postgresql-16

Step 5:设置 postgres 超级用户密码

Bash
# 切换到 postgres 系统用户
sudo -i -u postgres
​
# 进入 psql 交互终端
psql
​
# 设置密码
postgres=# ALTER USER postgres PASSWORD 'YourStrongP@ssw0rd!';
​
# 退出
postgres=# \q
exit

Step 6:验证安装

Bash
# 查看 PostgreSQL 版本
psql -V
# 输出:psql (PostgreSQL) 16.x
​
# 以 postgres 用户连接并查看版本
sudo -u postgres psql -c "SELECT version();"
​
# 列出数据库
sudo -u postgres psql -c "\l"

1.5 配置远程访问

PostgreSQL 默认仅允许本地连接。生产环境需配置远程访问:

修改 postgresql.conf

Bash
sudo vim /var/lib/pgsql/16/data/postgresql.conf

找到并修改:

Text
# 监听所有网络接口(默认 localhost)
listen_addresses = '*'

# 端口(默认 5432)
port = 5432

修改 pg_hba.conf(客户端认证)

Bash
sudo vim /var/lib/pgsql/16/data/pg_hba.conf

在文件末尾添加远程访问规则:

Text
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# 允许所有用户从任意 IP 使用密码认证连接(生产环境应限制 IP 范围)
host    all             all             0.0.0.0/0               scram-sha-256

# 允许特定子网(推荐生产环境)
# host    all             all             10.0.0.0/8              scram-sha-256
# host    all             all             192.168.1.0/24          scram-sha-256
安全警告

0.0.0.0/0 允许任意 IP 连接,仅适用于开发环境。生产环境应限制为具体 IP 或子网,并配合防火墙规则。

重启服务并放行防火墙

Bash
# 重启 PostgreSQL 使配置生效
sudo systemctl restart postgresql-16
​
# 放行 PostgreSQL 默认端口 5432
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --reload
​
# 验证远程连接
psql -h <服务器IP> -U postgres -d postgres

SELinux 配置

Bash
# 如果修改了默认端口,需要更新 SELinux 策略
sudo semanage port -a -t postgresql_port_t -p tcp 5433
​
# 如果修改了数据目录,更新 SELinux 上下文
sudo semanage fcontext -a -t postgresql_db_t "/data/pgdata(/.*)?" 
sudo restorecon -Rv /data/pgdata

1.6 安装 pgvector 扩展

pgvector 为 PostgreSQL 添加向量数据类型和相似度搜索能力,是 Spring AI PGVectorStore 的核心依赖。

方式一:PGDG 仓库安装(推荐)

Bash
# 直接从 PGDG 仓库安装 pgvector
sudo dnf install -y pgvector_16

方式二:源码编译安装

Bash
# 安装编译依赖
sudo dnf install -y postgresql16-devel gcc make git
​
# 克隆 pgvector 源码
cd /tmp
git clone --branch v0.8.0 https://github.com/pgvector/pgvector.git
cd pgvector
​
# 编译安装(需要 pg_config 在 PATH 中)
export PATH="/usr/pgsql-16/bin:$PATH"
make
sudo make install

启用 pgvector 扩展

Bash
# 连接到目标数据库
sudo -u postgres psql -d your_database
​
# 创建 pgvector 扩展
your_database=# CREATE EXTENSION IF NOT EXISTS vector;
​
# 同时创建 Spring AI 需要的其他扩展
your_database=# CREATE EXTENSION IF NOT EXISTS hstore;
your_database=# CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
​
# 验证扩展已安装
your_database=# \dx

验证 pgvector 功能

Sql
-- 创建测试表
CREATE TABLE items (
  id BIGSERIAL PRIMARY KEY,
  content TEXT,
  embedding vector(1536)  -- OpenAI text-embedding-ada-002 维度
);
​
-- 插入测试数据
INSERT INTO items (content, embedding) VALUES 
  ('Hello world', '[0.1, 0.2, 0.3, ' || repeat('0.0, ', 1531) || '0.4, 0.5]');
​
-- 查看表结构
\d items
​
-- 清理测试数据
DROP TABLE items;

二、macOS 安装(Apple Silicon M 系列)

2.1 系统要求

要求说明
芯片Apple Silicon(M1/M2/M3/M4/M5)或 Intel
macOS 版本≥ macOS 13(Ventura)
磁盘空间≥ 500 MB

2.2 方式一:Homebrew 安装(推荐开发环境)

安装 PostgreSQL 16

Bash
# 更新 Homebrew
brew update
​
# 安装 PostgreSQL 16
brew install postgresql@16

配置 PATH

Homebrew 安装的 postgresql@16 是 keg-only(不自动链接),需手动添加 PATH:

Bash
# 添加到 ~/.zshrc(macOS 默认 zsh)
echo 'export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
​
# 验证
psql --version

启动服务

Bash
# 使用 brew services 管理(推荐,支持开机自启)
brew services start postgresql@16
​
# 或手动启动
pg_ctl -D /opt/homebrew/var/postgresql@16 start

初始化与验证

Homebrew 安装时已自动执行 initdb,数据目录位于 /opt/homebrew/var/postgresql@16。

Bash
# 验证服务运行
brew services list | grep postgresql
​
# 连接数据库(默认以当前 macOS 用户名连接)
psql postgres
​
# 创建 postgres 超级用户(如未自动创建)
creatuser -s postgres
​
# 设置密码
psql -c "ALTER USER postgres PASSWORD 'YourP@ssw0rd!';"

常用 brew 命令

Bash
# 查看服务状态
brew services list | grep postgresql
​
# 停止服务
brew services stop postgresql@16
​
# 重启服务
brew services restart postgresql@16
​
# 查看日志
tail -f /opt/homebrew/var/log/postgresql@16.log
Apple Silicon 路径说明
  • Homebrew 安装目录:/opt/homebrew/opt/postgresql@16/
  • 数据目录:/opt/homebrew/var/postgresql@16/
  • 配置文件:/opt/homebrew/var/postgresql@16/postgresql.conf
  • HBA 配置:/opt/homebrew/var/postgresql@16/pg_hba.conf
  • Intel Mac 路径为 /usr/local/ 开头

安装 pgvector(Homebrew)

Bash
# 直接通过 Homebrew 安装 pgvector
brew install pgvector
​
# 连接数据库并启用扩展
psql postgres -c "CREATE EXTENSION IF NOT EXISTS vector;"
psql postgres -c "CREATE EXTENSION IF NOT EXISTS hstore;"
psql postgres -c 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp";'
​
# 验证
psql postgres -c "\dx"

2.3 方式二:EDB 图形安装器

  1. 访问 EDB PostgreSQL Downloads,选择 PostgreSQL 16 → macOS
  2. 下载 DMG 安装包,按向导完成安装
  3. 安装过程中设置超级用户密码和端口
  4. 安装完成后包含:PostgreSQL Server、pgAdmin 4、命令行工具、StackBuilder
  5. 将命令行工具加入 PATH:
Bash
export PATH="/Library/PostgreSQL/16/bin:$PATH"
  1. 使用 StackBuilder 可额外安装 pgvector 等扩展

2.4 方式三:Postgres.app(零配置)

Postgres.app 是 macOS 原生应用,支持 Apple Silicon,内置 pgvector:

  1. 下载 Postgres.app(选择包含 PostgreSQL 16 的版本)
  2. 拖入 Applications 文件夹并打开
  3. 点击 Initialize 初始化数据库
  4. 配置 PATH:
Bash
echo 'export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
Tip

**Postgres.app 优势:** 内置 pgvector、PostGIS 等常用扩展,无需额外安装。非常适合本地开发环境快速搭建。

三、Windows 安装

Tip

PostgreSQL 完整支持 Windows 平台。官方提供 EDB 图形安装器和 ZIP 免安装包。pgvector 也可通过预编译包或 Visual Studio 编译安装。

3.1 系统要求

要求说明
系统版本Windows 10(64 位)/ Windows 11 / Windows Server 2019+
架构x86_64(64 位)
磁盘空间≥ 512 MB
前置依赖Microsoft Visual C++ 2015–2022 Redistributable(安装器自动包含)

3.2 方式一:EDB 图形安装器(推荐)

安装步骤

  1. 访问 EDB PostgreSQL Downloads,选择 PostgreSQL 16 → Windows x86-64
  2. 下载并运行安装程序
  3. 安装向导配置:
    • 安装目录:默认 C:\Program Files\PostgreSQL\16\
    • 数据目录:默认 C:\Program Files\PostgreSQL\16\data\
    • 超级用户密码:设置 postgres 用户密码
    • 端口:默认 5432
    • 区域设置:选择 Default locale 或 Chinese (Simplified), China
    • 组件选择:勾选 PostgreSQL Server、pgAdmin 4、Stack Builder、Command Line Tools
  4. 完成安装

验证安装

Powershell
# 添加到 PATH(如未自动添加)
$env:PATH += ";C:\Program Files\PostgreSQL\16\bin"
​
# 验证版本
psql --version
​
# 连接数据库
psql -U postgres -d postgres
​
# 查看版本
postgres=# SELECT version();

服务管理

Powershell
# 查看 PostgreSQL 服务状态
Get-Service postgresql*
​
# 停止/启动
Stop-Service postgresql-x64-16
Start-Service postgresql-x64-16
​
# 或使用 pg_ctl
pg_ctl status -D "C:\Program Files\PostgreSQL\16\data"
pg_ctl restart -D "C:\Program Files\PostgreSQL\16\data"

3.3 方式二:ZIP Archive 免安装版

  1. 从 EDB Downloads 下载 ZIP 包
  2. 解压到目标目录(如 D:\pgsql16)
  3. 以管理员身份打开 PowerShell:
Powershell
# 初始化数据目录
cd D:\pgsql16\bin
.\initdb -D D:\pgsql16\data -U postgres -W -E UTF8 --locale=C
​
# 启动服务(前台模式测试)
.\pg_ctl start -D D:\pgsql16\data
​
# 注册为 Windows 服务
.\pg_ctl register -N PostgreSQL16 -D D:\pgsql16\data
net start PostgreSQL16

3.4 Windows 上安装 pgvector

方式一:StackBuilder 安装(推荐)

如果使用 EDB 安装器,安装完成后打开 StackBuilder → 选择 PostgreSQL 16 → Categories → Spatial Extensions / Add-ons → 查找 pgvector 安装。

方式二:预编译包安装

Powershell
# 下载 pgvector Windows 预编译包
# 从 https://github.com/pgvector/pgvector/releases 下载对应版本的 Windows zip
​
# 解压后,将文件复制到 PostgreSQL 安装目录
copy vector.dll "C:\Program Files\PostgreSQL\16\lib\"
copy vector.control "C:\Program Files\PostgreSQL\16\share\extension\"
copy vector--*.sql "C:\Program Files\PostgreSQL\16\share\extension\"

方式三:源码编译(Visual Studio)

Powershell
# 前置条件:安装 Visual Studio Build Tools(含 C++ 工具集)
​
# 打开 "x64 Native Tools Command Prompt for VS 2022"
cd C:\path\to\pgvector
set "PGROOT=C:\Program Files\PostgreSQL\16"
nmake /F Makefile.win
nmake /F Makefile.win install

启用 pgvector

Sql
-- 连接数据库后启用扩展
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
​
-- 验证
\dx

3.5 Windows 注意事项

  • 编码设置: 建议初始化数据库时使用 UTF8 编码,避免中文乱码
  • Windows Defender: 将 PostgreSQL 数据目录添加到 Defender 排除列表以提升 I/O 性能
  • pgAdmin 4: EDB 安装器自带 pgAdmin 4 图形管理工具,适合不熟悉命令行的用户
  • 配置文件位置: 默认在 C:\Program Files\PostgreSQL\16\data\ 下的 postgresql.conf 和 pg_hba.conf

四、通用最佳实践配置(postgresql.conf)

4.1 配置文件位置

平台路径
Linux(PGDG)/var/lib/pgsql/16/data/postgresql.conf
macOS(Homebrew)/opt/homebrew/var/postgresql@16/postgresql.conf
macOS(EDB/Postgres.app)/Library/PostgreSQL/16/data/postgresql.conf
Windows(EDB)C:\Program Files\PostgreSQL\16\data\postgresql.conf

4.2 推荐的生产级 postgresql.conf

以下配置适用于 4 核 8 GB 内存 的典型云服务器,可根据实际资源按比例调整:

Text
# ============================================================
# PostgreSQL 16 — 生产环境推荐配置
# 基准:4 核 CPU / 8 GB RAM / SSD 存储
# ============================================================

# === 连接设置 ===
listen_addresses = '*'
port = 5432
max_connections = 200
superuser_reserved_connections = 3

# === 内存设置(核心调优)===
shared_buffers = 2GB                  # 物理内存的 25%
effective_cache_size = 6GB            # 物理内存的 75%(OS缓存估算)
work_mem = 16MB                       # 每个排序/哈希操作的内存
maintenance_work_mem = 512MB          # VACUUM/CREATE INDEX 使用的内存
wal_buffers = 64MB                    # WAL 写缓冲区

# === WAL 设置 ===
wal_level = replica                   # 支持流复制和归档
max_wal_size = 2GB
min_wal_size = 512MB
checkpoint_completion_target = 0.9
wal_compression = zstd                # PostgreSQL 16 新增 zstd 压缩

# === 查询优化 ===
random_page_cost = 1.1                # SSD 存储调低(默认 4.0 适用于 HDD)
effective_io_concurrency = 200        # SSD 并发 I/O
default_statistics_target = 200       # 统计信息采样精度

# === 并行查询 ===
max_worker_processes = 4
max_parallel_workers_per_gather = 2
max_parallel_workers = 4
max_parallel_maintenance_workers = 2

# === 日志设置 ===
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_rotation_age = 1d
log_rotation_size = 100MB
log_min_duration_statement = 1000     # 记录超过 1 秒的慢查询
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_line_prefix = '%t [%p] %u@%d '
log_statement = 'ddl'                 # 记录所有 DDL 语句

# === 字符集 ===
lc_messages = 'en_US.UTF-8'
lc_monetary = 'en_US.UTF-8'
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'

# === 安全设置 ===
password_encryption = scram-sha-256
ssl = off                              # 生产环境建议 on + 配置证书

# === 自动清理(Autovacuum)===
autovacuum = on
autovacuum_max_workers = 3
autovacuum_naptime = 30s
autovacuum_vacuum_threshold = 50
autovacuum_vacuum_scale_factor = 0.1
autovacuum_analyze_threshold = 50
autovacuum_analyze_scale_factor = 0.05

4.3 关键配置说明

配置项说明推荐值
shared_buffersPostgreSQL 最重要的内存参数,数据页缓存物理内存的 25%
effective_cache_size优化器估算可用缓存(含 OS 页面缓存)物理内存的 75%
work_mem单个查询排序/哈希的内存上限16–64 MB
maintenance_work_mem维护操作(VACUUM、索引创建)的内存256 MB–1 GB
random_page_cost随机 I/O 成本估算。SSD 应调低SSD: 1.1 / HDD: 4.0
wal_levelWAL 日志级别。replica 支持流复制replica
max_connections最大并发连接数根据应用负载,搭配连接池
log_min_duration_statement记录慢查询的阈值(毫秒)1000(1 秒)
password_encryption密码加密方式scram-sha-256(最安全)
autovacuum自动清理死元组,防止表膨胀on(务必保持开启)

4.4 pgvector 专用配置

针对向量搜索工作负载,建议追加以下配置:

Text
# === pgvector 优化 ===
# 增大 maintenance_work_mem 以加速 HNSW/IVFFlat 索引创建
maintenance_work_mem = 1GB

# 增大 work_mem 以优化向量搜索查询
work_mem = 64MB

# 并行索引创建(PostgreSQL 16 支持)
max_parallel_maintenance_workers = 4

4.5 应用配置

Bash
# Linux
sudo vim /var/lib/pgsql/16/data/postgresql.conf
sudo systemctl restart postgresql-16
​
# 验证关键参数
sudo -u postgres psql -c "SHOW shared_buffers;"
sudo -u postgres psql -c "SHOW effective_cache_size;"
sudo -u postgres psql -c "SHOW max_connections;"
在线修改 vs 重启修改

部分参数支持 ALTER SYSTEM SET ... ; + SELECT pg_reload_conf(); 在线生效(如 work_mem、log_min_duration_statement)。需要重启的参数包括 shared_buffers、max_connections、wal_level 等。

五、Spring AI PGVectorStore 集成配置

5.1 前置条件

确保 PostgreSQL 数据库已启用以下三个扩展:

Sql
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

5.2 创建专用数据库和用户

Sql
-- 创建 Spring AI 专用数据库
CREATE DATABASE springai_vectordb
  ENCODING 'UTF8'
  LC_COLLATE 'en_US.UTF-8'
  LC_CTYPE 'en_US.UTF-8';
​
-- 创建专用用户
CREATE USER springai_user WITH PASSWORD 'StrongP@ssw0rd!';
​
-- 授权
GRANT ALL PRIVILEGES ON DATABASE springai_vectordb TO springai_user;
​
-- 连接到新数据库并启用扩展(需超级用户)
\c springai_vectordb
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
​
-- 授予 schema 权限
GRANT ALL ON SCHEMA public TO springai_user;

5.3 Spring Boot application.yml 配置

YAML
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/springai_vectordb
    username: springai_user
    password: StrongP@ssw0rd!
    driver-class-name: org.postgresql.Driver
  ai:
    vectorstore:
      pgvector:
        index-type: hnsw              # HNSW 索引,适合高召回率场景
        distance-type: cosine_distance # 余弦距离(最常用)
        dimensions: 1536              # 匹配 Embedding 模型维度
        initialize-schema: true       # 自动创建 vector_store 表
        remove-existing-vector-store-table: false
        schema-name: public
        table-name: vector_store
        schema-validation: true

5.4 Maven 依赖(Spring AI 1.1.2)

Xml
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-pgvector-store-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

5.5 向量索引选择指南

索引类型特点适用场景Spring AI 配置
HNSW高召回率、查询快、构建慢、内存占用大数据量 < 100 万,要求高精度index-type: hnsw
IVFFlat构建快、内存占用小、召回率稍低数据量大、资源有限index-type: ivfflat
无索引精确搜索(暴力扫描)数据量 < 1 万index-type: none
推荐

Spring AI 默认使用 HNSW 索引。对于大多数 RAG 应用(文档数 < 100 万),HNSW 是最佳选择。构建索引时确保 maintenance_work_mem 设置足够大(建议 ≥ 1 GB)。

六、Docker 快速部署(PostgreSQL + pgvector)

适合快速搭建开发/测试环境:

Bash
# 拉取 pgvector 官方镜像(已内置 pgvector 扩展)
docker pull pgvector/pgvector:pg16
​
# 运行容器
docker run -d \
  --name pgvector-db \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=YourP@ssw0rd! \
  -e POSTGRES_DB=springai_vectordb \
  -p 5432:5432 \
  -v pgvector-data:/var/lib/postgresql/data \
  pgvector/pgvector:pg16
​
# 连接并启用扩展
docker exec -it pgvector-db psql -U postgres -d springai_vectordb -c "
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";
"
​
# 验证
docker exec -it pgvector-db psql -U postgres -d springai_vectordb -c "\dx"

Docker Compose 配置

YAML
version: '3.8'
services:
  pgvector:
    image: pgvector/pgvector:pg16
    container_name: pgvector-db
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: YourP@ssw0rd!
      POSTGRES_DB: springai_vectordb
    ports:
      - "5432:5432"
    volumes:
      - pgvector-data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    restart: unless-stopped
    shm_size: '256mb'
    command: >
      postgres
      -c shared_buffers=512MB
      -c effective_cache_size=1536MB
      -c work_mem=32MB
      -c maintenance_work_mem=256MB
      -c random_page_cost=1.1
      -c max_connections=100
​
volumes:
  pgvector-data:

init.sql 内容:

Sql
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
推荐开发环境使用 Docker

pgvector/pgvector:pg16 镜像已预装 pgvector 扩展,一条命令即可启动。Apple Silicon Mac 上原生支持 linux/arm64 架构,性能优秀。

七、常见问题与解决方案

7.1 权限问题

问题:FATAL: Peer authentication failed for user "postgres"

原因: pg_hba.conf 默认使用 peer 认证(仅允许同名系统用户连接)。

解决:

Bash
# 编辑 pg_hba.conf
sudo vim /var/lib/pgsql/16/data/pg_hba.conf
​
# 将 local 行的 METHOD 从 peer 改为 scram-sha-256
# local   all   all                           scram-sha-256
​
# 重新加载配置
sudo systemctl reload postgresql-16

7.2 连接被拒绝

问题:could not connect to server: Connection refused

排查步骤:

Bash
# 1. 确认 PostgreSQL 正在运行
sudo systemctl status postgresql-16
​
# 2. 确认监听地址和端口
sudo -u postgres psql -c "SHOW listen_addresses;"
sudo -u postgres psql -c "SHOW port;"
​
# 3. 检查防火墙
sudo firewall-cmd --list-ports
​
# 4. 检查 pg_hba.conf 是否允许目标 IP
grep -v '^#' /var/lib/pgsql/16/data/pg_hba.conf | grep -v '^$'

7.3 pgvector 扩展创建失败

问题:ERROR: could not open extension control file "/usr/pgsql-16/share/extension/vector.control"

原因: pgvector 未正确安装或安装到了错误的 PostgreSQL 版本目录。

解决:

Bash
# 确认 pgvector 包已安装
rpm -qa | grep pgvector
​
# 如果未安装
sudo dnf install -y pgvector_16
​
# 源码编译时确认 pg_config 指向正确版本
/usr/pgsql-16/bin/pg_config --sharedir
# 应输出:/usr/pgsql-16/share

7.4 共享内存不足

问题:FATAL: could not map anonymous shared memory: Cannot allocate memory

原因: shared_buffers 设置过大,超过系统限制。

解决:

Bash
# 查看当前内核共享内存限制
sysctl kernel.shmmax
sysctl kernel.shmall
​
# 临时调整(立即生效)
sudo sysctl -w kernel.shmmax=8589934592   # 8GB
sudo sysctl -w kernel.shmall=2097152       # 8GB / 4096
​
# 永久调整
echo 'kernel.shmmax = 8589934592' | sudo tee -a /etc/sysctl.conf
echo 'kernel.shmall = 2097152' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

7.5 字符集问题

问题:中文数据显示乱码或排序异常

解决: 确认数据库编码为 UTF-8:

Sql
-- 查看数据库编码
SELECT datname, encoding, datcollate, datctype 
FROM pg_database;
​
-- 创建新数据库时指定编码
CREATE DATABASE mydb 
  ENCODING 'UTF8' 
  LC_COLLATE 'en_US.UTF-8' 
  LC_CTYPE 'en_US.UTF-8';

7.6 向量索引构建缓慢

问题:HNSW 索引创建耗时过长

解决:

Sql
-- 增大维护内存
SET maintenance_work_mem = '2GB';
​
-- 增大并行工作进程(PostgreSQL 16)
SET max_parallel_maintenance_workers = 4;
​
-- 创建索引(使用 HNSW)
CREATE INDEX ON vector_store 
  USING hnsw (embedding vector_cosine_ops)
  WITH (m = 16, ef_construction = 200);
HNSW 索引参数说明
  • m:每个节点的最大连接数(默认 16,增大提高召回率但增加内存)
  • ef_construction:构建时搜索深度(默认 64,增大提高索引质量但增加构建时间)
  • 查询时可设置 SET hnsw.ef_search = 200; 提高搜索精度

7.7 macOS:Homebrew PostgreSQL 找不到命令

问题:zsh: command not found: psql

原因: postgresql@16 是 keg-only,未自动链接到 PATH。

解决:

Bash
# 添加到 PATH
echo 'export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
​
# 验证
which psql
psql --version

7.8 Windows:服务启动失败

问题:PostgreSQL 服务无法启动

排查:

Powershell
# 查看事件日志
Get-EventLog -LogName Application -Source postgresql* -Newest 20
​
# 查看 PostgreSQL 日志
Get-Content "C:\Program Files\PostgreSQL\16\data\log\postgresql-*.log" -Tail 50
​
# 常见原因:
# 1. 端口被占用 → 修改 postgresql.conf 中的 port
# 2. 数据目录权限 → 确保 "Network Service" 用户有读写权限
# 3. 配置语法错误 → 检查 postgresql.conf

八、安装验证清单

  • psql --version — 确认客户端版本为 PostgreSQL 16.x
  • sudo -u postgres psql -c "SELECT version();" — 确认服务端版本
  • \dx — 确认 vector、hstore、uuid-ossp 扩展已启用
  • SHOW shared_buffers; — 确认内存配置正确
  • SHOW listen_addresses; — 确认监听地址
  • SHOW log_min_duration_statement; — 确认慢查询日志已开启
  • systemctl is-active postgresql-16 — 确认服务运行(Linux)
  • systemctl is-enabled postgresql-16 — 确认开机自启(Linux)
  • 远程连接测试 — 从应用服务器连接数据库成功
  • Spring AI PGVectorStore 连接测试 — 应用启动无报错

九、卸载 PostgreSQL

Linux(CentOS Stream 9)

Bash
# 停止服务
sudo systemctl stop postgresql-16
sudo systemctl disable postgresql-16
​
# 卸载所有 PostgreSQL 包
sudo dnf remove -y postgresql16-server postgresql16 postgresql16-contrib pgvector_16
​
# 删除数据、日志和配置
sudo rm -rf /var/lib/pgsql
sudo rm -f /etc/yum.repos.d/pgdg-redhat-all.repo
​
# 删除 postgres 用户和组(可选)
sudo userdel -r postgres

macOS

Homebrew 安装:

Bash
brew services stop postgresql@16
brew uninstall postgresql@16
brew uninstall pgvector
rm -rf /opt/homebrew/var/postgresql@16

EDB 安装: 使用 Applications 目录下的 PostgreSQL 卸载程序(uninstall-postgresql)

**Postgres.app:** 直接将应用拖入废纸篓,删除 ~/Library/Application Support/Postgres/

Windows

  1. 控制面板 → 程序和功能 → PostgreSQL 16 → 卸载
  2. 删除数据目录(默认 C:\Program Files\PostgreSQL\16\data\)
  3. 删除安装目录(默认 C:\Program Files\PostgreSQL\16\)
  4. 删除 Windows 服务(如有残留):sc delete postgresql-x64-16

十、参考资源

  • PostgreSQL 16 官方文档
  • PostgreSQL 下载页面 — Linux Red Hat 系
  • PostgreSQL 下载页面 — macOS
  • PostgreSQL 下载页面 — Windows
  • pgvector 官方仓库
  • Spring AI — PGVector VectorStore
  • PostgreSQL Server Configuration
  • PostgreSQL HBA 认证配置
← 上一篇
下一篇 →
1.1 环境信息1.2 前置条件1.3 卸载旧版本与冲突包1.4 安装 PostgreSQL 16(推荐:PGDG 官方仓库)Step 1:安装 PGDG 官方 Yum 仓库Step 2:安装 PostgreSQL 16 ServerStep 3:初始化数据库集群Step 4:启动并设置开机自启Step 5:设置 postgres 超级用户密码Step 6:验证安装1.5 配置远程访问修改 postgresql.conf修改 pg_hba.conf(客户端认证)重启服务并放行防火墙SELinux 配置1.6 安装 pgvector 扩展方式一:PGDG 仓库安装(推荐)方式二:源码编译安装启用 pgvector 扩展验证 pgvector 功能2.1 系统要求2.2 方式一:Homebrew 安装(推荐开发环境)安装 PostgreSQL 16配置 PATH启动服务初始化与验证常用 brew 命令安装 pgvector(Homebrew)2.3 方式二:EDB 图形安装器2.4 方式三:[Postgres.app](http://Postgres.app)(零配置)3.1 系统要求3.2 方式一:EDB 图形安装器(推荐)安装步骤验证安装服务管理3.3 方式二:ZIP Archive 免安装版3.4 Windows 上安装 pgvector方式一:StackBuilder 安装(推荐)方式二:预编译包安装方式三:源码编译(Visual Studio)启用 pgvector3.5 Windows 注意事项4.1 配置文件位置4.2 推荐的生产级 postgresql.conf4.3 关键配置说明4.4 pgvector 专用配置4.5 应用配置5.1 前置条件5.2 创建专用数据库和用户5.3 Spring Boot application.yml 配置5.4 Maven 依赖(Spring AI 1.1.2)5.5 向量索引选择指南Docker Compose 配置7.1 权限问题问题:FATAL: Peer authentication failed for user "postgres"7.2 连接被拒绝问题:could not connect to server: Connection refused7.3 pgvector 扩展创建失败问题:ERROR: could not open extension control file "/usr/pgsql-16/share/extension/vector.control"7.4 共享内存不足问题:FATAL: could not map anonymous shared memory: Cannot allocate memory7.5 字符集问题问题:中文数据显示乱码或排序异常7.6 向量索引构建缓慢问题:HNSW 索引创建耗时过长7.7 macOS:Homebrew PostgreSQL 找不到命令问题:zsh: command not found: psql7.8 Windows:服务启动失败问题:PostgreSQL 服务无法启动Linux(CentOS Stream 9)macOSWindows