Windows 平台主要有三种安装方式:
步骤 1:下载安装包
步骤 2:运行安装向导
# 下载后双击安装文件,如:postgresql-16.3-1-windows-x64.exe
安装向导关键配置项:
| 配置项 | 说明 | 建议值 |
|---|---|---|
| Installation Directory | 安装路径 | C:\Program Files\PostgreSQL\16 |
| Data Directory | 数据存储路径 | C:\Program Files\PostgreSQL\16\data |
| Port | 监听端口 | 5432(默认) |
| Superuser Password | 超级用户密码 | 设置强密码 |
| Locale | 本地化设置 | 选择C(避免排序问题) |
步骤 3:组件选择
☑ PostgreSQL Server(核心服务)
☑ pgAdmin 4(图形管理工具)
☑ Command Line Tools(命令行工具)
☑ Stack Builder(扩展工具包,可选)
步骤 4:验证安装
# 检查服务状态
Get-Service postgresql-x64-16
# 命令行连接
"C:\Program Files\PostgreSQL\16\bin\psql.exe" -U postgres -d postgres
# 查看版本
SELECT version();
# 1. 下载压缩包并解压到 D:\pgsql
# 2. 初始化数据库
D:\pgsql\bin\initdb.exe -D D:\pgsql\data -U postgres -E UTF8 --locale=C
# 3. 启动服务
D:\pgsql\bin\pg_ctl.exe start -D D:\pgsql\data
# 4. 注册为 Windows 服务
D:\pgsql\bin\pg_ctl.exe register -N PostgreSQL -D D:\pgsql\data
# 5. 停止服务
D:\pgsql\bin\pg_ctl.exe stop -D D:\pgsql\data
# 启用 WSL2(管理员 PowerShell)
wsl --install
# 进入 Ubuntu 子系统
wsl
# 在 Ubuntu 中安装 PostgreSQL
sudo apt update
sudo apt install postgresql-16 postgresql-contrib-16
# 启动服务
sudo service postgresql start
# 切换用户连接
sudo -u postgres psql
官方 APT 仓库安装(推荐)
# 1. 添加 PostgreSQL 官方 APT 仓库
# 导入仓库签名密钥
sudo apt install curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
# 创建仓库配置文件
sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# 2. 更新并安装
sudo apt update
sudo apt install postgresql-16 postgresql-contrib-16
# 3. 查看安装状态
sudo systemctl status postgresql
# 4. 切换用户并连接
sudo -i -u postgres
psql
版本特定安装
# 安装 PostgreSQL 16
sudo apt install postgresql-16
# 安装 PostgreSQL 15
sudo apt install postgresql-15
# 同时安装多个版本(不同端口)
sudo apt install postgresql-16 postgresql-15
官方 YUM/DNF 仓库安装
# CentOS 7 / RHEL 7
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install -y postgresql16-server postgresql16-contrib
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
sudo systemctl start postgresql-16
sudo systemctl enable postgresql-16
# CentOS 8+ / Rocky Linux 8+ / RHEL 8+
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf install -y postgresql16-server postgresql16-contrib
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
sudo systemctl start postgresql-16
sudo systemctl enable postgresql-16
源码安装适合需要自定义编译选项的场景:
# 1. 安装编译依赖
# Ubuntu/Debian
sudo apt install build-essential libreadline-dev zlib1g-dev flex bison
# CentOS/RHEL
sudo yum groupinstall "Development Tools"
sudo yum install readline-devel zlib-devel flex bison
# 2. 下载源码
wget https://ftp.postgresql.org/pub/source/v16.3/postgresql-16.3.tar.gz
tar -xzf postgresql-16.3.tar.gz
cd postgresql-16.3
# 3. 配置编译选项
./configure --prefix=/usr/local/pgsql \
--with-pgport=5432 \
--with-perl \
--with-python \
--with-openssl \
--with-libxml \
--with-libxslt
# 4. 编译和安装
make -j $(nproc) # 并行编译,使用所有CPU核心
make install
# 5. 创建系统用户
sudo useradd -m -s /bin/bash postgres
# 6. 初始化数据库
sudo mkdir -p /usr/local/pgsql/data
sudo chown postgres:postgres /usr/local/pgsql/data
sudo -u postgres /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
# 7. 启动服务
sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
常用编译配置选项:
| 选项 | 说明 |
|---|---|
--prefix=PATH |
安装路径 |
--with-pgport=PORT |
默认端口 |
--with-perl |
PL/Perl 支持 |
--with-python |
PL/Python 支持 |
--with-openssl |
SSL 加密支持 |
--with-libxml |
XML 支持 |
--with-libxslt |
XSLT 支持 |
--with-icu |
ICU 国际化支持 |
--with-uuid=bsd/e2fs/ossp |
UUID 生成支持 |
# 安装 PostgreSQL
brew install postgresql@16
# 启动服务(开机自启)
brew services start postgresql@16
# 或手动启动
pg_ctl -D /opt/homebrew/var/postgresql@16 start
# 连接数据库
psql postgres
# 查看状态
brew services list | grep postgresql
# 1. 从官网下载 Postgres.app
# https://postgresapp.com/
# 2. 拖入应用程序文件夹
# 3. 配置 PATH(添加到 ~/.zshrc 或 ~/.bash_profile)
export PATH="/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH"
# 4. 命令行连接
psql -h localhost -p 5432 -U postgres
# 下载 EnterpriseDB 的 macOS 安装包
# 与 Windows 版本类似,使用图形化向导安装
# 拉取镜像
docker pull postgres:16-alpine
# 运行容器
docker run -d \
--name postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_USER=myuser \
-e POSTGRES_DB=mydb \
-p 5432:5432 \
-v postgres_data:/var/lib/postgresql/data \
postgres:16-alpine
# 进入容器连接
docker exec -it postgres psql -U myuser -d mydb
version: '3.8'
services:
postgres:
image: postgres:16-alpine
container_name: postgres
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB:-appdb}
POSTGRES_USER: ${POSTGRES_USER:-appuser}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secure_password}
POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C"
TZ: Asia/Shanghai
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init-scripts:/docker-entrypoint-initdb.d
- ./backup:/backup
networks:
- postgres_network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U appuser -d appdb"]
interval: 10s
timeout: 5s
retries: 5
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
volumes:
postgres_data:
name: postgres_data
networks:
postgres_network:
name: postgres_network
version: '3.8'
services:
postgres:
image: postgres:16-alpine
container_name: postgres
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
TZ: Asia/Shanghai
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./conf/postgresql.conf:/etc/postgresql/postgresql.conf
- ./conf/pg_hba.conf:/etc/postgresql/pg_hba.conf
command: postgres -c config_file=/etc/postgresql/postgresql.conf
# 使用 AWS CLI 创建实例
aws rds create-db-instance \
--db-instance-identifier my-postgres \
--db-instance-class db.t3.micro \
--engine postgres \
--engine-version 16.3 \
--master-username postgres \
--master-user-password MySecretPassword \
--allocated-storage 20 \
--backup-retention-period 7 \
--port 5432
# 通过阿里云 CLI 或控制台创建
# 支持 Babelfish 特性(兼容 SQL Server 协议)
gcloud sql instances create my-postgres \
--database-version=POSTGRES_16 \
--tier=db-f1-micro \
--region=us-central1 \
--root-password=MySecretPassword
| 平台 | 配置文件路径 |
|---|---|
| Windows (安装包) | C:\Program Files\PostgreSQL\16\data\ |
| Windows (免安装) | D:\pgsql\data\ |
| Linux (APT) | /etc/postgresql/16/main/ |
| Linux (YUM/DNF) | /var/lib/pgsql/16/data/ |
| macOS (Homebrew) | /opt/homebrew/var/postgresql@16/ |
| Docker | 容器内/var/lib/postgresql/data/ |
postgresql.conf - 主配置文件
# 连接设置
listen_addresses = 'localhost' # 监听地址,'*' 表示所有地址
port = 5432 # 监听端口
max_connections = 100 # 最大连接数
# 内存设置
shared_buffers = 128MB # 共享缓冲区大小
effective_cache_size = 4GB # 系统缓存估算
work_mem = 4MB # 每个查询工作内存
maintenance_work_mem = 64MB # 维护操作内存
# 日志设置
log_directory = 'log' # 日志目录
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # 日志文件名
log_statement = 'ddl' # 记录 DDL 语句
log_min_duration_statement = 1000 # 慢查询阈值(ms)
pg_hba.conf - 客户端认证配置
# TYPE DATABASE USER ADDRESS METHOD
# 本地连接(Unix域套接字)
local all all scram-sha-256
# IPv4 本地连接
host all all 127.0.0.1/32 scram-sha-256
# IPv6 本地连接
host all all ::1/128 scram-sha-256
# 内网连接(示例)
host all all 192.168.1.0/24 scram-sha-256
Linux (systemd)
# 启动
sudo systemctl start postgresql
# 停止
sudo systemctl stop postgresql
# 重启
sudo systemctl restart postgresql
# 查看状态
sudo systemctl status postgresql
# 开机自启
sudo systemctl enable postgresql
Windows (服务管理)
# 使用 net 命令
net start postgresql-x64-16
net stop postgresql-x64-16
# 使用 sc 命令
sc start postgresql-x64-16
sc stop postgresql-x64-16
sc query postgresql-x64-16
# 使用 pg_ctl
pg_ctl start -D "C:\Program Files\PostgreSQL\16\data"
pg_ctl stop -D "C:\Program Files\PostgreSQL\16\data"
-- 创建新用户
CREATE USER app_user WITH PASSWORD 'secure_password';
-- 创建数据库
CREATE DATABASE app_db OWNER app_user;
-- 授权
GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;
-- 创建只读用户
CREATE USER readonly WITH PASSWORD 'readonly_pass';
GRANT CONNECT ON DATABASE app_db TO readonly;
GRANT USAGE ON SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
# 通过 psql 连接
psql -h localhost -p 5432 -U postgres -d postgres
# 执行验证查询
SELECT version();
SELECT current_database(), current_user;
# 初始化测试数据
pgbench -i -s 100 mydb
# 运行测试(60秒,10个客户端)
pgbench -c 10 -j 2 -T 60 mydb
# 输出示例
# tps = 1254.332345 (excluding connections establishing)
-- 查看数据库列表
\l
-- 查看连接
SELECT pid, usename, application_name, client_addr, state
FROM pg_stat_activity;
-- 查看数据库大小
SELECT datname, pg_database_size(datname)/1024/1024 || ' MB'
FROM pg_database;
-- 查看表大小
SELECT schemaname, tablename,
pg_total_relation_size(schemaname||'.'||tablename)/1024/1024 || ' MB'
FROM pg_tables
WHERE tablename NOT LIKE 'pg%'
LIMIT 10;
# 检查端口占用
# Linux
sudo netstat -tlnp | grep 5432
sudo lsof -i :5432
# Windows
netstat -ano | findstr :5432
# 解决方案:修改 port 参数
# 在 postgresql.conf 中修改端口后重启服务
# 检查 pg_hba.conf 配置
# 检查 postgresql.conf 中的 listen_addresses
# 检查防火墙设置
# Linux 防火墙放行
sudo ufw allow 5432/tcp
# Windows 防火墙(管理员 PowerShell)
New-NetFirewallRule -DisplayName "PostgreSQL" -Direction Inbound -Protocol TCP -LocalPort 5432 -Action Allow
# 查看日志定位问题
# Linux
sudo tail -f /var/log/postgresql/postgresql-16-main.log
# Windows
# 查看事件查看器 -> Windows 日志 -> 应用程序
# 或查看 data/pg_log/ 目录下的日志文件
# 常见原因:
# 1. 数据目录权限不正确
# 2. 端口被占用
# 3. postmaster.pid 残留文件