外观
PostgreSQL 在 Windows 上安装
系统要求与安装方式选择
系统要求
| 系统版本 | 支持情况 |
|---|---|
| Windows Server 2012 R2 及以上版本 | 完全支持 |
| Windows 10 及以上版本(64位) | 完全支持 |
| Windows Server 2008 R2 | 仅支持 PostgreSQL 12 及以下版本 |
硬件要求
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| 内存 | 2 GB RAM | 4 GB RAM 以上 |
| 存储空间 | 10 GB 可用磁盘空间 | 50 GB 以上可用磁盘空间 |
| CPU | 2 核处理器 | 4 核处理器以上 |
| 存储类型 | SATA 硬盘 | SSD 或 NVMe 固态硬盘 |
安装方式对比
| 安装方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 官方安装包 | 生产环境、开发环境 | 简单易用、自动配置服务、包含完整组件 | 版本可能滞后于最新发布 |
| ZIP 压缩包 | 快速部署、自定义路径、多版本共存 | 灵活定制、无需安装向导、便于迁移 | 需要手动配置服务和环境变量 |
| Docker 容器 | 开发测试、环境隔离、快速部署 | 环境一致性好、隔离性强、便于管理 | 性能开销较大、不适合所有生产场景 |
| Chocolatey 包管理器 | 开发环境、自动化部署 | 命令行安装、便于自动化脚本 | 依赖 Chocolatey、版本选择有限 |
官方安装包安装
下载安装包
- 访问 PostgreSQL 官方下载页面
- 选择 Windows x86-64 架构
- 选择合适的版本(推荐 LTS 版本,如 15 或 16)
- 点击 Download the installer 下载
.exe安装文件
安装步骤
启动安装程序
- 双击下载的
postgresql-xx.x-x-windows-x64.exe文件 - 如有安全提示,选择 运行
- 进入安装向导,点击 Next
选择安装目录
- 默认安装路径:
C:\Program Files\PostgreSQL\xx - 建议:
- 生产环境避免安装在系统盘(C盘)
- 选择有足够空间的非系统磁盘
- 路径中避免包含空格和特殊字符
选择组件
| 组件 | 描述 | 推荐安装 |
|---|---|---|
| PostgreSQL Server | 数据库服务器核心 | 必选 |
| pgAdmin 4 | 图形化管理工具 | 开发环境推荐,生产环境可选 |
| Stack Builder | 扩展安装器 | 可选 |
| Command Line Tools | psql、pg_dump 等命令行工具 | 必选 |
| Documentation | 离线文档 | 可选 |
选择数据目录
- 默认路径:
C:\Program Files\PostgreSQL\xx\data - 建议:
- 与安装目录分离,存放在不同磁盘
- 选择高性能存储(SSD/NVMe)
- 确保有足够的空间用于数据增长
设置超级用户密码
- 设置
postgres用户的密码 - 密码要求:
- 至少 8 位字符
- 包含大小写字母、数字和特殊字符
- 避免使用常见密码
- 定期更换密码
设置端口
- 默认端口:
5432 - 若端口被占用,可修改为其他端口(如 5433)
- 建议生产环境使用默认端口,便于管理和维护
选择区域设置
- 推荐选择 Default locale
- 或根据业务需求选择特定区域(如
Chinese (Simplified)_China.936)
完成安装
- 检查所有配置是否正确,点击 Install 开始安装
- 安装完成后,取消勾选 Launch Stack Builder(可后续手动启动)
- 点击 Finish 完成安装
安装后的基础配置
服务管理
通过服务管理器
- 按下
Win + R,输入services.msc,按回车 - 找到 PostgreSQL xx 服务
- 右键菜单可进行 启动、停止、重启 操作
- 设置 启动类型 为 自动 确保开机自启
通过命令行
cmd
:: 以管理员身份运行命令提示符
:: 启动服务
net start postgresql-xx
:: 停止服务
net stop postgresql-xx
:: 重启服务
net stop postgresql-xx && net start postgresql-xx
:: 设置开机自启
sc config postgresql-xx start= auto
:: 查看服务状态
sc query postgresql-xx环境变量配置
为方便使用命令行工具,建议添加 PostgreSQL 二进制目录到系统环境变量:
- 右键 此电脑 → 属性 → 高级系统设置 → 环境变量
- 在 系统变量 中找到 Path,点击 编辑
- 点击 新建,添加 PostgreSQL 的 bin 目录路径(如
C:\Program Files\PostgreSQL\15\bin) - 点击 确定 保存设置
验证安装
cmd
:: 查看 psql 版本
psql --version
:: 连接到数据库
psql -U postgres
:: 输入密码后,查看 PostgreSQL 版本
postgres=# SELECT version();
:: 查看数据库列表
postgres=# \l
:: 退出 psql
postgres=# \qZIP 压缩包安装(免安装版)
下载 ZIP 压缩包
- 访问 PostgreSQL 官方下载页面
- 选择 ZIP Archive 版本
- 下载对应版本的 ZIP 压缩包
安装步骤
解压压缩包
- 将 ZIP 文件解压到目标目录(如
D:\pgsql) - 解压后目录结构:
D:\pgsql\ ├── bin\ # 可执行文件 ├── include\ # 头文件 ├── lib\ # 库文件 └── share\ # 共享文件
创建数据目录
cmd
:: 创建数据目录
mkdir D:\pgdata
:: 设置环境变量
setx PGDATA "D:\pgdata" /M
setx PATH "%PATH%;D:\pgsql\bin" /M
:: 重新打开命令提示符使环境变量生效初始化数据库
cmd
:: 以管理员身份运行命令提示符
:: 初始化数据库
initdb -D "%PGDATA%" -E UTF8 --locale=Chinese_People's Republic of China.936 -W
:: 参数说明:
:: -D:数据目录
:: -E:字符集
:: --locale:区域设置
:: -W:提示输入超级用户密码注册为系统服务
cmd
:: 以管理员身份运行命令提示符
pg_ctl register -N "PostgreSQL" -D "%PGDATA%" -S auto -U "NT AUTHORITY\NetworkService"
:: 启动服务
net start PostgreSQL
:: 验证服务状态
sc query PostgreSQLDocker 容器安装
安装 Docker Desktop
- 下载 Docker Desktop for Windows
- 安装并启动 Docker Desktop
- 确保 WSL 2 已启用(推荐使用 WSL 2 后端)
运行 PostgreSQL 容器
powershell
# 拉取 PostgreSQL 镜像
# 拉取最新版本
docker pull postgres
# 或拉取特定版本
docker pull postgres:16
# 创建数据卷(持久化存储)
docker volume create pgdata
# 运行容器
# 基础配置
docker run -d `
--name postgres `
-e POSTGRES_PASSWORD=your_secure_password `
-e POSTGRES_USER=postgres `
-e POSTGRES_DB=postgres `
-p 5432:5432 `
-v pgdata:/var/lib/postgresql/data `
postgres:16
# 生产环境推荐配置
docker run -d `
--name postgres `
--restart unless-stopped `
-e POSTGRES_PASSWORD=your_secure_password `
-e POSTGRES_USER=postgres `
-e POSTGRES_DB=postgres `
-e PGDATA=/var/lib/postgresql/data/pgdata `
-e POSTGRES_INITDB_ARGS="--encoding=UTF8 --lc-collate=C --lc-ctype=en_US.UTF-8" `
-p 5432:5432 `
-v pgdata:/var/lib/postgresql/data `
--memory=4g `
--cpus=2 `
postgres:16
# 查看容器状态
docker ps
# 访问 PostgreSQL
docker exec -it postgres psql -U postgres初始数据库配置
修改超级用户密码
sql
-- 连接到数据库后执行
ALTER USER postgres WITH PASSWORD 'new_secure_password';创建新数据库和用户
sql
-- 创建新数据库
CREATE DATABASE myappdb;
-- 创建新用户
CREATE USER myappuser WITH PASSWORD 'app_user_password';
-- 授予用户对数据库的权限
GRANT ALL PRIVILEGES ON DATABASE myappdb TO myappuser;
-- 授予用户对 public schema 的权限
GRANT ALL ON SCHEMA public TO myappuser;
-- 授予用户创建表的权限
ALTER USER myappuser CREATEDB;允许远程连接
默认情况下,PostgreSQL 只允许本地连接。如需远程访问:
修改
postgresql.conf:- 文件位置:
C:\Program Files\PostgreSQL\xx\data\postgresql.conf - 修改以下参数:ini
listen_addresses = '*' # 允许所有 IP 访问
- 文件位置:
修改
pg_hba.conf:- 文件位置:
C:\Program Files\PostgreSQL\xx\data\pg_hba.conf - 在末尾添加:
# TYPE DATABASE USER ADDRESS METHOD host all all 0.0.0.0/0 scram-sha-256 host all all ::/0 scram-sha-256
- 文件位置:
重启服务使配置生效:
cmdnet stop postgresql-xx net start postgresql-xx
生产环境配置优化
内存参数优化
编辑 postgresql.conf 文件:
ini
# 共享缓冲区(建议设置为系统内存的 25%)
shared_buffers = 4GB
# 每个查询操作可使用的内存
work_mem = 16MB
# 维护操作使用的内存(如 VACUUM、CREATE INDEX)
maintenance_work_mem = 1GB
# 系统缓存建议值(建议设置为系统内存的 75%)
effective_cache_size = 12GB
# WAL 缓冲区大小(默认通常足够)
wal_buffers = 16MB连接参数优化
ini
# 最大连接数(根据实际需求调整)
max_connections = 200
# 保留备用连接数
superuser_reserved_connections = 3
# TCP 连接超时时间
tcp_keepalives_idle = 60WAL 配置优化
ini
# WAL 级别(流复制需要 replica 或 logical)
wal_level = replica
# 最大 WAL 大小
max_wal_size = 8GB
# 最小 WAL 大小
min_wal_size = 4GB
# 检查点间隔时间
checkpoint_timeout = 15min
# 检查点完成目标(平滑 I/O)
checkpoint_completion_target = 0.9
# WAL 归档模式(生产环境建议启用)
archive_mode = on
archive_command = 'copy %p "D:\pgarchive\%f"'日志配置优化
ini
# 日志输出目标
log_destination = 'stderr'
logging_collector = on
# 日志目录
log_directory = 'pg_log'
# 日志文件名格式
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
# 日志轮转策略
log_rotation_age = 1d
log_rotation_size = 0
# 记录执行时间超过 1 秒的语句
log_min_duration_statement = 1000
# 记录慢查询的详细信息
log_statement = 'mod'
# 记录检查点信息
log_checkpoints = on
# 记录连接和断开连接信息
log_connections = on
log_disconnections = on常用命令
命令行工具
| 命令 | 描述 | 示例 |
|---|---|---|
psql | 命令行客户端 | psql -U postgres -d mydb |
pg_dump | 备份数据库 | pg_dump -U postgres -F t mydb > backup.tar |
pg_restore | 恢复数据库 | pg_restore -U postgres -d mydb backup.tar |
createdb | 创建数据库 | createdb -U postgres newdb |
dropdb | 删除数据库 | dropdb -U postgres olddb |
pg_ctl | 管理服务 | pg_ctl status -D "D:\pgdata" |
PowerShell 常用操作
powershell
# 登录 PostgreSQL
psql -U postgres
# 执行 SQL 文件
psql -U postgres -d mydb -f script.sql
# 查看数据库列表
psql -U postgres -l
# 查看表结构
psql -U postgres -d mydb -c "\d"
# 导出数据库结构
pg_dump -U postgres -s mydb > schema.sql
# 导出数据库数据
pg_dump -U postgres -a mydb > data.sql常见问题与解决方案
端口被占用
症状:安装或启动时提示端口 5432 被占用
解决方案:
cmd
:: 查找占用端口的进程
netstat -ano | findstr :5432
:: 终止占用端口的进程
:: 替换 <PID> 为实际进程 ID
taskkill /PID <PID> /F
:: 或修改 PostgreSQL 端口
:: 在 postgresql.conf 中修改
port = 5433服务启动失败
症状:服务无法启动,错误代码 1067
解决方案:
- 检查日志文件:
C:\Program Files\PostgreSQL\xx\data\pg_log\postgresql-*.log - 常见原因:
- 数据目录权限问题:确保 PostgreSQL 服务账户对数据目录有完全控制权限
- 配置文件错误:检查 postgresql.conf 中的语法错误
- 磁盘空间不足:确保数据目录所在磁盘有足够空间
- 端口冲突:检查是否有其他服务占用了 PostgreSQL 端口
无法连接到数据库
症状:
psql: error: connection to server at "localhost" (::1), port 5432 failed: Connection refusedFATAL: password authentication failed for user "postgres"
解决方案:
检查服务是否启动:
cmdsc query postgresql-xx检查密码是否正确:
- 重新设置 postgres 用户密码
- 使用正确的密码连接
检查防火墙设置:
- 允许 PostgreSQL 服务通过防火墙
- 允许端口 5432 的入站连接
检查 pg_hba.conf 配置:
- 确保允许从客户端 IP 地址连接
- 检查认证方法是否正确
安装程序无响应
症状:安装过程中安装程序卡住不动
解决方案:
- 关闭所有杀毒软件和防火墙
- 以管理员身份运行安装程序
- 检查系统是否有足够的内存和磁盘空间
- 尝试下载最新版本的安装包
- 考虑使用 ZIP 压缩包安装方式
卸载 PostgreSQL
通过控制面板
- 打开 控制面板 → 程序和功能
- 找到 PostgreSQL xx,右键选择 卸载/更改
- 选择 Remove 完全卸载
- 勾选要卸载的组件
- 按照向导完成卸载
手动清理
卸载后建议手动清理以下残留:
- 数据目录:删除 PostgreSQL 数据目录(如
C:\Program Files\PostgreSQL\xx\data) - 安装目录:删除 PostgreSQL 安装目录(如
C:\Program Files\PostgreSQL\) - 环境变量:从 Path 中移除 PostgreSQL 相关路径
- 服务:如果服务未被删除,使用命令删除:cmd
sc delete postgresql-xx - 注册表:删除 PostgreSQL 相关注册表项(谨慎操作)
- 路径:
HKEY_LOCAL_MACHINE\SOFTWARE\PostgreSQL - 路径:
HKEY_CURRENT_USER\SOFTWARE\PostgreSQL
- 路径:
最佳实践
- 定期备份:建立完善的备份策略,包括全量备份和增量备份
- 监控日志:定期检查 PostgreSQL 日志,及时发现和解决问题
- 更新版本:定期更新 PostgreSQL 到最新稳定版本,修复安全漏洞
- 使用 SSD:将数据目录和 WAL 目录放在 SSD 上,提高性能
- 合理配置内存:根据系统内存调整 shared_buffers 等参数
- 限制连接数:根据服务器资源合理设置 max_connections
- 启用 WAL 归档:配置 WAL 归档,支持时间点恢复
- 使用连接池:对于高并发场景,使用连接池(如 PgBouncer)
- 定期 VACUUM:定期执行 VACUUM 操作,回收空间
- 监控性能:使用监控工具(如 pgAdmin、Prometheus + Grafana)监控数据库性能
总结
在 Windows 上安装 PostgreSQL 有多种方式,每种方式都有其适用场景:
- 官方安装包:适合大多数用户,简单易用,自动配置服务
- ZIP 压缩包:适合需要自定义配置或多版本共存的场景
- Docker 容器:适合开发测试和环境隔离的场景
安装完成后,需要进行适当的配置和优化,包括服务管理、环境变量配置、初始数据库设置和生产环境优化。定期备份、监控日志、更新版本是保证数据库长期稳定运行的重要措施。
通过遵循本文中的最佳实践和配置建议,DBA 可以在 Windows 系统上快速、安全地部署和管理 PostgreSQL 数据库,满足各种业务需求。
