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 的推荐组合。
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 的继任) |
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 版本前需禁用内置模块:
# 禁用 CentOS 内置的 PostgreSQL 模块(避免版本冲突)
sudo dnf module disable postgresql -y
# 卸载旧版 PostgreSQL(如有)
sudo dnf remove -y postgresql-server postgresql如果之前有 PostgreSQL 数据需要保留,请先备份 /var/lib/pgsql/ 目录,再执行卸载操作。
1.4 安装 PostgreSQL 16(推荐:PGDG 官方仓库)
Step 1:安装 PGDG 官方 Yum 仓库
# 安装 PostgreSQL 16 官方仓库 RPM
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpmpgdg-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
# 安装 PostgreSQL 16 服务端和客户端
sudo dnf install -y postgresql16-server postgresql16 postgresql16-contrib各包说明:
| 包名 | 说明 |
|---|---|
postgresql16-server | PostgreSQL 16 服务端守护进程(postgres) |
postgresql16 | PostgreSQL 16 客户端工具(psql、pg_dump 等) |
postgresql16-contrib | 附加模块和扩展(hstore、uuid-ossp、pg_stat_statements 等,Spring AI 需要 hstore 和 uuid-ossp) |
Step 3:初始化数据库集群
# 初始化数据目录(默认 /var/lib/pgsql/16/data/)
sudo /usr/pgsql-16/bin/postgresql-16-setup initdbinitdb 创建数据目录结构、默认配置文件(postgresql.conf、pg_hba.conf)和系统表。此步骤仅需执行一次。
Step 4:启动并设置开机自启
# 启动 PostgreSQL 服务
sudo systemctl start postgresql-16
# 设置开机自动启动
sudo systemctl enable postgresql-16
# 验证运行状态
sudo systemctl status postgresql-16Step 5:设置 postgres 超级用户密码
# 切换到 postgres 系统用户
sudo -i -u postgres
# 进入 psql 交互终端
psql
# 设置密码
postgres=# ALTER USER postgres PASSWORD 'YourStrongP@ssw0rd!';
# 退出
postgres=# \q
exitStep 6:验证安装
# 查看 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
sudo vim /var/lib/pgsql/16/data/postgresql.conf找到并修改:
# 监听所有网络接口(默认 localhost)
listen_addresses = '*'
# 端口(默认 5432)
port = 5432修改 pg_hba.conf(客户端认证)
sudo vim /var/lib/pgsql/16/data/pg_hba.conf在文件末尾添加远程访问规则:
# 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-2560.0.0.0/0 允许任意 IP 连接,仅适用于开发环境。生产环境应限制为具体 IP 或子网,并配合防火墙规则。
重启服务并放行防火墙
# 重启 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 postgresSELinux 配置
# 如果修改了默认端口,需要更新 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/pgdata1.6 安装 pgvector 扩展
pgvector 为 PostgreSQL 添加向量数据类型和相似度搜索能力,是 Spring AI PGVectorStore 的核心依赖。
方式一:PGDG 仓库安装(推荐)
# 直接从 PGDG 仓库安装 pgvector
sudo dnf install -y pgvector_16方式二:源码编译安装
# 安装编译依赖
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 扩展
# 连接到目标数据库
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 功能
-- 创建测试表
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
# 更新 Homebrew
brew update
# 安装 PostgreSQL 16
brew install postgresql@16配置 PATH
Homebrew 安装的 postgresql@16 是 keg-only(不自动链接),需手动添加 PATH:
# 添加到 ~/.zshrc(macOS 默认 zsh)
echo 'export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# 验证
psql --version启动服务
# 使用 brew services 管理(推荐,支持开机自启)
brew services start postgresql@16
# 或手动启动
pg_ctl -D /opt/homebrew/var/postgresql@16 start初始化与验证
Homebrew 安装时已自动执行 initdb,数据目录位于 /opt/homebrew/var/postgresql@16。
# 验证服务运行
brew services list | grep postgresql
# 连接数据库(默认以当前 macOS 用户名连接)
psql postgres
# 创建 postgres 超级用户(如未自动创建)
creatuser -s postgres
# 设置密码
psql -c "ALTER USER postgres PASSWORD 'YourP@ssw0rd!';"常用 brew 命令
# 查看服务状态
brew services list | grep postgresql
# 停止服务
brew services stop postgresql@16
# 重启服务
brew services restart postgresql@16
# 查看日志
tail -f /opt/homebrew/var/log/postgresql@16.log- 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)
# 直接通过 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 图形安装器
- 访问 EDB PostgreSQL Downloads,选择 PostgreSQL 16 → macOS
- 下载 DMG 安装包,按向导完成安装
- 安装过程中设置超级用户密码和端口
- 安装完成后包含:PostgreSQL Server、pgAdmin 4、命令行工具、StackBuilder
- 将命令行工具加入 PATH:
export PATH="/Library/PostgreSQL/16/bin:$PATH"- 使用 StackBuilder 可额外安装 pgvector 等扩展
2.4 方式三:Postgres.app(零配置)
Postgres.app 是 macOS 原生应用,支持 Apple Silicon,内置 pgvector:
- 下载 Postgres.app(选择包含 PostgreSQL 16 的版本)
- 拖入 Applications 文件夹并打开
- 点击 Initialize 初始化数据库
- 配置 PATH:
echo 'export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc**Postgres.app 优势:** 内置 pgvector、PostGIS 等常用扩展,无需额外安装。非常适合本地开发环境快速搭建。
三、Windows 安装
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 图形安装器(推荐)
安装步骤
- 访问 EDB PostgreSQL Downloads,选择 PostgreSQL 16 → Windows x86-64
- 下载并运行安装程序
- 安装向导配置:
- 安装目录:默认
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
- 安装目录:默认
- 完成安装
验证安装
# 添加到 PATH(如未自动添加)
$env:PATH += ";C:\Program Files\PostgreSQL\16\bin"
# 验证版本
psql --version
# 连接数据库
psql -U postgres -d postgres
# 查看版本
postgres=# SELECT version();服务管理
# 查看 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 免安装版
- 从 EDB Downloads 下载 ZIP 包
- 解压到目标目录(如
D:\pgsql16) - 以管理员身份打开 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 PostgreSQL163.4 Windows 上安装 pgvector
方式一:StackBuilder 安装(推荐)
如果使用 EDB 安装器,安装完成后打开 StackBuilder → 选择 PostgreSQL 16 → Categories → Spatial Extensions / Add-ons → 查找 pgvector 安装。
方式二:预编译包安装
# 下载 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)
# 前置条件:安装 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
-- 连接数据库后启用扩展
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- 验证
\dx3.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 内存 的典型云服务器,可根据实际资源按比例调整:
# ============================================================
# 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.054.3 关键配置说明
| 配置项 | 说明 | 推荐值 |
|---|---|---|
shared_buffers | PostgreSQL 最重要的内存参数,数据页缓存 | 物理内存的 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_level | WAL 日志级别。replica 支持流复制 | replica |
max_connections | 最大并发连接数 | 根据应用负载,搭配连接池 |
log_min_duration_statement | 记录慢查询的阈值(毫秒) | 1000(1 秒) |
password_encryption | 密码加密方式 | scram-sha-256(最安全) |
autovacuum | 自动清理死元组,防止表膨胀 | on(务必保持开启) |
4.4 pgvector 专用配置
针对向量搜索工作负载,建议追加以下配置:
# === pgvector 优化 ===
# 增大 maintenance_work_mem 以加速 HNSW/IVFFlat 索引创建
maintenance_work_mem = 1GB
# 增大 work_mem 以优化向量搜索查询
work_mem = 64MB
# 并行索引创建(PostgreSQL 16 支持)
max_parallel_maintenance_workers = 44.5 应用配置
# 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;"部分参数支持 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 数据库已启用以下三个扩展:
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";5.2 创建专用数据库和用户
-- 创建 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 配置
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: true5.4 Maven 依赖(Spring AI 1.1.2)
<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)
适合快速搭建开发/测试环境:
# 拉取 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 配置
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 内容:
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";pgvector/pgvector:pg16 镜像已预装 pgvector 扩展,一条命令即可启动。Apple Silicon Mac 上原生支持 linux/arm64 架构,性能优秀。
七、常见问题与解决方案
7.1 权限问题
问题:FATAL: Peer authentication failed for user "postgres"
原因: pg_hba.conf 默认使用 peer 认证(仅允许同名系统用户连接)。
解决:
# 编辑 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-167.2 连接被拒绝
问题:could not connect to server: Connection refused
排查步骤:
# 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 版本目录。
解决:
# 确认 pgvector 包已安装
rpm -qa | grep pgvector
# 如果未安装
sudo dnf install -y pgvector_16
# 源码编译时确认 pg_config 指向正确版本
/usr/pgsql-16/bin/pg_config --sharedir
# 应输出:/usr/pgsql-16/share7.4 共享内存不足
问题:FATAL: could not map anonymous shared memory: Cannot allocate memory
原因: shared_buffers 设置过大,超过系统限制。
解决:
# 查看当前内核共享内存限制
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 -p7.5 字符集问题
问题:中文数据显示乱码或排序异常
解决: 确认数据库编码为 UTF-8:
-- 查看数据库编码
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 索引创建耗时过长
解决:
-- 增大维护内存
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);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。
解决:
# 添加到 PATH
echo 'export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# 验证
which psql
psql --version7.8 Windows:服务启动失败
问题:PostgreSQL 服务无法启动
排查:
# 查看事件日志
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)
# 停止服务
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 postgresmacOS
Homebrew 安装:
brew services stop postgresql@16
brew uninstall postgresql@16
brew uninstall pgvector
rm -rf /opt/homebrew/var/postgresql@16EDB 安装: 使用 Applications 目录下的 PostgreSQL 卸载程序(uninstall-postgresql)
**Postgres.app:** 直接将应用拖入废纸篓,删除 ~/Library/Application Support/Postgres/
Windows
- 控制面板 → 程序和功能 → PostgreSQL 16 → 卸载
- 删除数据目录(默认
C:\Program Files\PostgreSQL\16\data\) - 删除安装目录(默认
C:\Program Files\PostgreSQL\16\) - 删除 Windows 服务(如有残留):
sc delete postgresql-x64-16