Skip to content

PostgreSQL 在 Windows 上安装

系统要求与安装方式选择

系统要求

系统版本支持情况
Windows Server 2012 R2 及以上版本完全支持
Windows 10 及以上版本(64位)完全支持
Windows Server 2008 R2仅支持 PostgreSQL 12 及以下版本

硬件要求

组件最低要求推荐配置
内存2 GB RAM4 GB RAM 以上
存储空间10 GB 可用磁盘空间50 GB 以上可用磁盘空间
CPU2 核处理器4 核处理器以上
存储类型SATA 硬盘SSD 或 NVMe 固态硬盘

安装方式对比

安装方式适用场景优点缺点
官方安装包生产环境、开发环境简单易用、自动配置服务、包含完整组件版本可能滞后于最新发布
ZIP 压缩包快速部署、自定义路径、多版本共存灵活定制、无需安装向导、便于迁移需要手动配置服务和环境变量
Docker 容器开发测试、环境隔离、快速部署环境一致性好、隔离性强、便于管理性能开销较大、不适合所有生产场景
Chocolatey 包管理器开发环境、自动化部署命令行安装、便于自动化脚本依赖 Chocolatey、版本选择有限

官方安装包安装

下载安装包

  1. 访问 PostgreSQL 官方下载页面
  2. 选择 Windows x86-64 架构
  3. 选择合适的版本(推荐 LTS 版本,如 15 或 16)
  4. 点击 Download the installer 下载 .exe 安装文件

安装步骤

启动安装程序

  1. 双击下载的 postgresql-xx.x-x-windows-x64.exe 文件
  2. 如有安全提示,选择 运行
  3. 进入安装向导,点击 Next

选择安装目录

  • 默认安装路径:C:\Program Files\PostgreSQL\xx
  • 建议:
    • 生产环境避免安装在系统盘(C盘)
    • 选择有足够空间的非系统磁盘
    • 路径中避免包含空格和特殊字符

选择组件

组件描述推荐安装
PostgreSQL Server数据库服务器核心必选
pgAdmin 4图形化管理工具开发环境推荐,生产环境可选
Stack Builder扩展安装器可选
Command Line Toolspsql、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 完成安装

安装后的基础配置

服务管理

通过服务管理器

  1. 按下 Win + R,输入 services.msc,按回车
  2. 找到 PostgreSQL xx 服务
  3. 右键菜单可进行 启动停止重启 操作
  4. 设置 启动类型自动 确保开机自启

通过命令行

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 二进制目录到系统环境变量:

  1. 右键 此电脑属性高级系统设置环境变量
  2. 系统变量 中找到 Path,点击 编辑
  3. 点击 新建,添加 PostgreSQL 的 bin 目录路径(如 C:\Program Files\PostgreSQL\15\bin
  4. 点击 确定 保存设置

验证安装

cmd
:: 查看 psql 版本
psql --version

:: 连接到数据库
psql -U postgres

:: 输入密码后,查看 PostgreSQL 版本
postgres=# SELECT version();

:: 查看数据库列表
postgres=# \l

:: 退出 psql
postgres=# \q

ZIP 压缩包安装(免安装版)

下载 ZIP 压缩包

  1. 访问 PostgreSQL 官方下载页面
  2. 选择 ZIP Archive 版本
  3. 下载对应版本的 ZIP 压缩包

安装步骤

解压压缩包

  1. 将 ZIP 文件解压到目标目录(如 D:\pgsql
  2. 解压后目录结构:
    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 PostgreSQL

Docker 容器安装

安装 Docker Desktop

  1. 下载 Docker Desktop for Windows
  2. 安装并启动 Docker Desktop
  3. 确保 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 只允许本地连接。如需远程访问:

  1. 修改 postgresql.conf

    • 文件位置:C:\Program Files\PostgreSQL\xx\data\postgresql.conf
    • 修改以下参数:
      ini
      listen_addresses = '*'      # 允许所有 IP 访问
  2. 修改 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
  3. 重启服务使配置生效

    cmd
    net 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 = 60

WAL 配置优化

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

解决方案

  1. 检查日志文件:C:\Program Files\PostgreSQL\xx\data\pg_log\postgresql-*.log
  2. 常见原因:
    • 数据目录权限问题:确保 PostgreSQL 服务账户对数据目录有完全控制权限
    • 配置文件错误:检查 postgresql.conf 中的语法错误
    • 磁盘空间不足:确保数据目录所在磁盘有足够空间
    • 端口冲突:检查是否有其他服务占用了 PostgreSQL 端口

无法连接到数据库

症状

  • psql: error: connection to server at "localhost" (::1), port 5432 failed: Connection refused
  • FATAL: password authentication failed for user "postgres"

解决方案

  1. 检查服务是否启动

    cmd
    sc query postgresql-xx
  2. 检查密码是否正确

    • 重新设置 postgres 用户密码
    • 使用正确的密码连接
  3. 检查防火墙设置

    • 允许 PostgreSQL 服务通过防火墙
    • 允许端口 5432 的入站连接
  4. 检查 pg_hba.conf 配置

    • 确保允许从客户端 IP 地址连接
    • 检查认证方法是否正确

安装程序无响应

症状:安装过程中安装程序卡住不动

解决方案

  1. 关闭所有杀毒软件和防火墙
  2. 以管理员身份运行安装程序
  3. 检查系统是否有足够的内存和磁盘空间
  4. 尝试下载最新版本的安装包
  5. 考虑使用 ZIP 压缩包安装方式

卸载 PostgreSQL

通过控制面板

  1. 打开 控制面板程序和功能
  2. 找到 PostgreSQL xx,右键选择 卸载/更改
  3. 选择 Remove 完全卸载
  4. 勾选要卸载的组件
  5. 按照向导完成卸载

手动清理

卸载后建议手动清理以下残留:

  1. 数据目录:删除 PostgreSQL 数据目录(如 C:\Program Files\PostgreSQL\xx\data
  2. 安装目录:删除 PostgreSQL 安装目录(如 C:\Program Files\PostgreSQL\
  3. 环境变量:从 Path 中移除 PostgreSQL 相关路径
  4. 服务:如果服务未被删除,使用命令删除:
    cmd
    sc delete postgresql-xx
  5. 注册表:删除 PostgreSQL 相关注册表项(谨慎操作)
    • 路径:HKEY_LOCAL_MACHINE\SOFTWARE\PostgreSQL
    • 路径:HKEY_CURRENT_USER\SOFTWARE\PostgreSQL

最佳实践

  1. 定期备份:建立完善的备份策略,包括全量备份和增量备份
  2. 监控日志:定期检查 PostgreSQL 日志,及时发现和解决问题
  3. 更新版本:定期更新 PostgreSQL 到最新稳定版本,修复安全漏洞
  4. 使用 SSD:将数据目录和 WAL 目录放在 SSD 上,提高性能
  5. 合理配置内存:根据系统内存调整 shared_buffers 等参数
  6. 限制连接数:根据服务器资源合理设置 max_connections
  7. 启用 WAL 归档:配置 WAL 归档,支持时间点恢复
  8. 使用连接池:对于高并发场景,使用连接池(如 PgBouncer)
  9. 定期 VACUUM:定期执行 VACUUM 操作,回收空间
  10. 监控性能:使用监控工具(如 pgAdmin、Prometheus + Grafana)监控数据库性能

总结

在 Windows 上安装 PostgreSQL 有多种方式,每种方式都有其适用场景:

  • 官方安装包:适合大多数用户,简单易用,自动配置服务
  • ZIP 压缩包:适合需要自定义配置或多版本共存的场景
  • Docker 容器:适合开发测试和环境隔离的场景

安装完成后,需要进行适当的配置和优化,包括服务管理、环境变量配置、初始数据库设置和生产环境优化。定期备份、监控日志、更新版本是保证数据库长期稳定运行的重要措施。

通过遵循本文中的最佳实践和配置建议,DBA 可以在 Windows 系统上快速、安全地部署和管理 PostgreSQL 数据库,满足各种业务需求。