Skip to content

Windows 安装 ​

Windows 上安装 PostgreSQL 的主流方式是使用 EDB(EnterpriseDB)提供的图形化安装包,它集成了服务注册、数据目录初始化与 pgAdmin 管理工具。本节介绍安装包的分步操作、组件选择、端口与密码设置、环境变量配置,并对比 WSL2 方案。

前置知识

阅读本节前,建议先了解:macOS 安装(Homebrew)

基础概念 ​

  • EDB 安装包(EDB Installer):EnterpriseDB 公司为 PostgreSQL 官方提供的 Windows 安装程序,包含服务端、pgAdmin、Stack Builder
  • 服务注册:Windows 上 PostgreSQL 以 Windows 服务(Windows Service)形式运行,由「服务管理器」统一管理
  • 数据目录(Data Directory):Windows 默认位于 C:\Program Files\PostgreSQL\18\data
  • Stack Builder:EDB 附带的扩展下载器,用于安装 PostGIS、ODBC 驱动等额外组件
  • WSL2(Windows Subsystem for Linux 2):在 Windows 内运行真正的 Linux 内核,可运行原生 Linux 版 PostgreSQL
  • 端口(Port):默认 5432;若机器上已装其他 PostgreSQL 实例需改端口
方案版本性能适用场景
EDB 安装包原生 Windows 版原生(略低于 Linux)本地开发、Windows Server 部署
WSL2Linux 版接近原生 Linux需与生产 Linux 环境一致
Docker DesktopLinux 容器有虚拟化开销多版本并存、快速试验
源码编译(MSVC)任意原生需要定制编译选项

版本说明

EDB 安装包通常在新大版本发布后数周内跟进。PostgreSQL 18 的安装包文件名形如 postgresql-18.x-x-windows-x64.exe。下载时请从 postgresql.org 官方下载页进入 EDB 镜像,避免第三方来源。

安装与配置 ​

下载安装包 ​

text
# 官方下载路径(浏览器访问)
https://www.postgresql.org/download/windows/

# 选择 "Interactive installer by EDB" → Download the installer
# 选择版本:PostgreSQL 18.x,平台 Windows x86-64

若需脚本化下载(PowerShell):

powershell
# 使用 PowerShell 下载安装包(版本号请核对官网最新)
$url = "https://get.enterprisedb.com/postgresql/postgresql-18.0-1-windows-x64.exe"
$out = "$env:USERPROFILE\Downloads\postgresql-18-windows-x64.exe"
Invoke-WebRequest -Uri $url -OutFile $out

# 校验文件大小,确认下载完整
Get-Item $out | Select-Object Name, Length

图形化安装步骤 ​

text
1. 双击安装包 → 选择安装语言(安装界面语言,与数据库编码无关)
2. Installation Directory → 默认 C:\Program Files\PostgreSQL\18,建议保持默认
3. Select Components → 见下方组件说明
4. Data Directory → 默认 C:\Program Files\PostgreSQL\18\data
   —— 生产环境建议改为独立数据盘,如 D:\PGDATA\18
5. Password → 设置超级用户 postgres 的密码(务必记录)
6. Port → 默认 5432(若被占用会被自动跳过,需手动指定)
7. Advanced Options → Locale 建议选 C 或 Chinese (Simplified)_China.936
8. Pre Installation Summary → 核对后点击 Next 开始安装
9. 安装完成后是否启动 Stack Builder → 首次可取消,需要扩展时再运行

安装组件选择 ​

组件说明是否推荐
PostgreSQL Server服务端核心,必选必选
pgAdmin 4官方图形化管理工具推荐
Stack Builder扩展与驱动下载器推荐
Command Line Tools命令行工具(psql / pg_dump 等)必选
EDB Language Pack语言支持包可选
text
# 最小化安装(仅服务端 + 命令行工具)适用于自动化部署
# 完整安装(含 pgAdmin)适用于开发人员本机

端口与密码设置 ​

ini
# C:\Program Files\PostgreSQL\18\data\postgresql.conf
# 端口:与已有实例冲突时修改,例如改为 5433
port = 5432

# 监听:开发机默认 localhost 即可
# 需要局域网访问时改为 '*',并同步配置 pg_hba.conf
listen_addresses = 'localhost'
ini
# C:\Program Files\PostgreSQL\18\data\pg_hba.conf
# 安装包默认对本机使用 scram-sha-256 密码认证
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
powershell
# 修改密码(使用 psql)
psql -U postgres -h localhost -p 5432 -c "ALTER USER postgres WITH PASSWORD 'NewStr0ngP@ss';"

环境变量 PATH ​

安装包不会自动把 psql.exe 加入 PATH,需要手动配置:

text
# 方式一:图形界面
Win + R → sysdm.cpl → 高级 → 环境变量
→ 系统变量 → Path → 编辑 → 新建
→ C:\Program Files\PostgreSQL\18\bin
powershell
# 方式二:PowerShell 命令行添加(当前用户,永久生效)
$pgBin = "C:\Program Files\PostgreSQL\18\bin"
$userPath = [Environment]::GetEnvironmentVariable("Path", "User")
if ($userPath -notlike "*$pgBin*") {
    [Environment]::SetEnvironmentVariable("Path", "$userPath;$pgBin", "User")
}
# 重新打开终端后验证
psql --version
text
psql (PostgreSQL) 18.0

服务管理 ​

powershell
# 查看服务状态
Get-Service -Name postgresql*

# 启动 / 停止 / 重启
Start-Service postgresql-x64-18
Stop-Service postgresql-x64-18
Restart-Service postgresql-x64-18

# 通过 sc 命令管理(等价写法)
sc.exe query postgresql-x64-18
sc.exe start postgresql-x64-18
sc.exe stop postgresql-x64-18
text
Status   Name                 DisplayName
------   ----                 -----------
Running  postgresql-x64-18     postgresql-x64-18 - PostgreSQL Server 18

详细说明 ​

数据目录与配置文件 ​

text
C:\Program Files\PostgreSQL\18\
├── bin\                  # psql.exe / pg_dump.exe / initdb.exe 等
├── data\                 # 数据目录
│   ├── postgresql.conf   # 主配置
│   ├── pg_hba.conf       # 客户端认证
│   ├── pg_ident.conf     # 用户映射
│   ├── base\             # 各数据库的物理文件
│   ├── global\           # 共享系统表
│   ├── pg_wal\           # WAL 预写日志
│   └── log\              # 日志目录(logging_collector 开启时)
├── include\              # 编译扩展所需头文件
├── lib\                  # 动态库与扩展
└── share\                # 扩展 SQL 脚本、locale 数据
powershell
# 确认数据目录位置(通过注册表或 psql 查询)
psql -U postgres -c "SHOW data_directory;"

# 查看配置文件实际路径(可能是 include 进来的其他文件)
psql -U postgres -c "SELECT name, setting FROM pg_settings WHERE name IN ('config_file','hba_file','ident_file');"
text
          name          |                            setting
------------------------+---------------------------------------------------------------
 config_file            | C:/Program Files/PostgreSQL/18/data/postgresql.conf
 hba_file               | C:/Program Files/PostgreSQL/18/data/pg_hba.conf
 ident_file             | C:/Program Files/PostgreSQL/18/data/pg_ident.conf
(3 rows)

常用连接方式 ​

powershell
# 通过回环地址连接
psql -h localhost -p 5432 -U postgres -d postgres

# 通过 Unix 风格 socket(Windows 上为 TCP + 命名管道)
psql -U postgres

# 连接字符串 URI(.NET / Java 驱动常用)
psql "postgresql://postgres:Secret@localhost:5432/postgres?sslmode=prefer"
text
psql (18.0)
Type "help" for help.

postgres=# SELECT version();
                       version
------------------------------------------------------
 PostgreSQL 18.0, compiled by Visual C++ build 1943, 64-bit
(1 row)

防火墙与局域网访问 ​

安装包默认只监听本机,若要允许局域网访问需两步:

powershell
# 1. 添加防火墙入站规则,放行 5432 端口(仅限内网网段)
New-NetFirewallRule -DisplayName "PostgreSQL 5432" `
  -Direction Inbound -Protocol TCP -LocalPort 5432 `
  -RemoteAddress 192.168.0.0/16 -Action Allow

# 2. 修改 postgresql.conf 的 listen_addresses = '*'
#    并在 pg_hba.conf 增加:
#    host    all    all    192.168.0.0/16    scram-sha-256

# 重启服务使 listen_addresses 生效
Restart-Service postgresql-x64-18
powershell
# 验证监听状态
netstat -ano | Select-String ":5432"
text
TCP    0.0.0.0:5432           0.0.0.0:0              LISTENING       4821
TCP    [::]:5432              [::]:0                 LISTENING       4821

WSL2 方案对比 ​

WSL2 让你在 Windows 中得到一个真正的 Linux 环境,运行与生产一致的 PostgreSQL。

powershell
# 安装 WSL2(管理员 PowerShell)
wsl --install -d Ubuntu-24.04

# 进入 WSL 后按 Linux 方式安装(见 Linux 安装一节)
wsl
bash
# 在 WSL 内(Ubuntu)添加 PGDG 源并安装 PostgreSQL 18
sudo apt update
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc \
  https://www.postgresql.org/media/keys/ACCC4CF8.asc
. /etc/os-release
echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] \
https://apt.postgresql.org/pub/repos/apt ${VERSION_CODENAME}-pgdg main" \
  | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt update && sudo apt install -y postgresql-18

# WSL2 内启动(systemd 未开启时用 pg_ctlcluster)
sudo pg_ctlcluster 18 main start
对比维度EDB 原生安装WSL2
安装复杂度图形化,简单需命令行,稍复杂
与生产一致性中(Windows 特有行为)高(与 Linux 生产一致)
文件系统性能高(NTFS 原生)跨 /mnt/c 访问慢,~/ 内正常
服务管理Windows 服务systemd / pg_ctlcluster
内存占用低需为 WSL 分配内存
扩展兼容性部分扩展(如 PostGIS)需 EDB 版本与 Linux 扩展完全一致
端口互通——WSL2 端口默认映射到 Windows localhost
适用人群纯 Windows 开发者需贴近 Linux 生产的开发者
bash
# WSL2 中的服务端口默认即可被 Windows 侧访问
# Windows 侧执行:
psql -h localhost -p 5432 -U postgres

卸载与清理 ​

powershell
# 1. 停止并删除服务
Stop-Service postgresql-x64-18
sc.exe delete postgresql-x64-18

# 2. 通过「应用和功能」卸载 PostgreSQL 18
# 3. 手动删除残留(危险!确认已备份数据)
# Remove-Item -Recurse -Force "C:\Program Files\PostgreSQL\18"

实战示例 ​

在 Windows Server 上静默安装 PostgreSQL 18、把数据目录放到数据盘、完成局域网访问配置,并验证远程连接。

powershell
# ---------- 步骤 1:静默安装(无人值守部署)----------
$installer = "$env:USERPROFILE\Downloads\postgresql-18-windows-x64.exe"
$log = "$env:TEMP\pg-install.log"

Start-Process -FilePath $installer -ArgumentList @(
    "--mode", "unattended",
    "--unattendedmodeui", "none",
    "--superpassword", "Str0ng_P@ssw0rd",
    "--serverport", "5432",
    "--prefix", "C:\Program Files\PostgreSQL\18",
    "--datadir", "D:\PGDATA\18",
    "--locale", "C",
    "--enable-components", "server,pgAdmin,commandlinetools"
) -Wait -NoNewWindow -RedirectStandardOutput $log

# 确认安装结果
Get-Service -Name postgresql-x64-18 | Select-Object Status, Name, DisplayName
text
Status   Name               DisplayName
------   ----               -----------
Running  postgresql-x64-18   postgresql-x64-18 - PostgreSQL Server 18
powershell
# ---------- 步骤 2:把 psql 加入 PATH ----------
$pgBin = "C:\Program Files\PostgreSQL\18\bin"
[Environment]::SetEnvironmentVariable(
  "Path",
  ([Environment]::GetEnvironmentVariable("Path","Machine") + ";$pgBin"),
  "Machine"
)
# 新开终端验证
psql --version
text
psql (PostgreSQL) 18.0
powershell
# ---------- 步骤 3:创建业务库与用户 ----------
$env:PGPASSWORD = "Str0ng_P@ssw0rd"
psql -U postgres -h localhost -c "CREATE ROLE app_rw LOGIN PASSWORD 'App_P@ss2026';"
psql -U postgres -h localhost -c "CREATE DATABASE demo OWNER app_rw ENCODING 'UTF8';"
text
CREATE ROLE
CREATE DATABASE
text
# ---------- 步骤 4:配置局域网访问 ----------
# 编辑 D:\PGDATA\18\postgresql.conf:
#   listen_addresses = '*'
#   port = 5432
# 编辑 D:\PGDATA\18\pg_hba.conf,追加:
#   host    all    all    192.168.0.0/16    scram-sha-256
powershell
# 放行防火墙并重启服务
New-NetFirewallRule -DisplayName "PostgreSQL 5432" `
  -Direction Inbound -Protocol TCP -LocalPort 5432 `
  -RemoteAddress 192.168.0.0/16 -Action Allow
Restart-Service postgresql-x64-18
Start-Sleep -Seconds 3
netstat -ano | Select-String ":5432.*LISTENING"
text
TCP    0.0.0.0:5432    0.0.0.0:0    LISTENING    3156
powershell
# ---------- 步骤 5:从另一台机器验证远程连接 ----------
psql "postgresql://app_rw:App_P%40ss2026@192.168.1.50:5432/demo" `
  -c "SELECT current_user, current_database(), inet_server_addr();"
text
 current_user | current_database | inet_server_addr
--------------+------------------+------------------
 app_rw       | demo             | 192.168.1.50
(1 row)

注意事项 ​

  • 安装程序设置的 postgres 密码一旦忘记,需临时修改 pg_hba.conf 为 trust、重启、重置密码,再把认证方式改回
  • listen_addresses 不是 reload 可改的参数,修改后必须在 Windows 服务中重启才能生效
  • Windows 版的路径使用反斜杠,但 PostgreSQL 配置文件内部统一使用正斜杠,混用会导致解析失败
  • 数据目录放在 C:\Program Files 下会受 UAC(用户账户控制)影响,备份与直接文件访问会遇到权限问题,建议迁到独立数据盘
  • Get-Service 名称带 x64 后缀,脚本中写死 postgresql-18 会找不到服务
  • WSL2 与 Windows 原生 PostgreSQL 不能同时监听 5432,二者只启一个
  • Windows 版不支持 initdb 之外的部分 Unix 特性(如 SIGHUP 语义、peer 认证);peer 认证在 Windows 上不可用
  • 不要关闭 Windows 服务的「自动」启动类型后忘记手动启动,会导致应用启动时连接超时
  • 跨 /mnt/c 目录访问 WSL 内的数据目录性能极差,WSL 中的数据目录必须放在 Linux 文件系统内
  • 卸载后 C:\Program Files\PostgreSQL\18\data 常被保留,重装前需确认清理,否则可能因残留数据导致初始化失败

最佳实践 ​

  • 生产部署优先把数据目录放到独立数据盘,与系统盘分离,便于 I/O 隔离与快照
  • 使用静默安装参数实现自动化部署,避免人工点击带来的配置漂移
  • 密码使用密码管理器保存,不要在脚本中硬编码明文;无人值守安装可临时用环境变量传入后立即清理
  • 需要与 Linux 生产环境高度一致时,优先选择 WSL2 或 Docker 而非原生 Windows 版
  • Windows 服务默认以 NT AUTHORITY\NetworkService 账户运行,如需访问网络共享目录要显式授权
  • 定期通过 Stack Builder 检查扩展更新,但生产环境升级扩展前先在测试库验证
  • 部署后立即完成「1.6 安全初始化」中的认证与 SSL 配置,勿保留默认 trust 行为
  • 使用 Windows 任务计划程序(Task Scheduler)调度 pg_dump 备份,并把备份目录纳入异地同步

下一节

继续学习:Docker 安装

参考链接 ​