PostgreSQL 安装部署

person 落叶    watch_later 2026-04-17 09:23:05
visibility 2    class 数据库,PostgreSQL    bookmark 专栏

一、Windows 平台安装

1. 安装方式选择

Windows 平台主要有三种安装方式:

  • 交互式安装程序(推荐):EnterpriseDB 提供的图形化安装包
  • 免安装压缩包:手动解压配置
  • WSL2 子系统:在 Windows 中运行 Linux 环境

2. 交互式安装程序(推荐)

步骤 1:下载安装包

  • 访问 PostgreSQL 官网:https://www.postgresql.org/download/windows/
  • 选择 EnterpriseDB 提供的安装程序
  • 下载最新版本(如 PostgreSQL 16/17)

步骤 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();

3. 免安装压缩包方式

# 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

4. WSL2 方式(推荐开发者使用)

# 启用 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

二、Linux 平台安装

1. Ubuntu/Debian 系统

官方 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

2. CentOS/RHEL/Rocky Linux

官方 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

3. 源码编译安装

源码安装适合需要自定义编译选项的场景:

# 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 生成支持

三、macOS 平台安装

1. Homebrew 方式(推荐)

# 安装 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

2. Postgres.app(GUI 方式)

# 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

3. 官方安装包

# 下载 EnterpriseDB 的 macOS 安装包
# 与 Windows 版本类似,使用图形化向导安装

四、Docker 容器化部署

1. 快速启动

# 拉取镜像
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

2. Docker Compose 完整配置

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

3. 带持久化配置的部署

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

五、云数据库服务

1. AWS RDS for PostgreSQL

# 使用 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

2. 阿里云 RDS PostgreSQL

# 通过阿里云 CLI 或控制台创建
# 支持 Babelfish 特性(兼容 SQL Server 协议)

3. Google Cloud SQL for PostgreSQL

gcloud sql instances create my-postgres \
  --database-version=POSTGRES_16 \
  --tier=db-f1-micro \
  --region=us-central1 \
  --root-password=MySecretPassword

六、安装后初始配置

1. 配置文件位置

平台 配置文件路径
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/

2. 核心配置文件

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

3. 数据库服务管理

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"

4. 创建数据库用户和数据库

-- 创建新用户
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;

七、安装后验证

1. 连接测试

# 通过 psql 连接
psql -h localhost -p 5432 -U postgres -d postgres

# 执行验证查询
SELECT version();
SELECT current_database(), current_user;

2. 性能基准测试(pgbench)

# 初始化测试数据
pgbench -i -s 100 mydb

# 运行测试(60秒,10个客户端)
pgbench -c 10 -j 2 -T 60 mydb

# 输出示例
# tps = 1254.332345 (excluding connections establishing)

3. 常用管理命令

-- 查看数据库列表
\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;

八、常见问题与解决

问题 1:端口冲突

# 检查端口占用
# Linux
sudo netstat -tlnp | grep 5432
sudo lsof -i :5432

# Windows
netstat -ano | findstr :5432

# 解决方案:修改 port 参数
# 在 postgresql.conf 中修改端口后重启服务

问题 2:连接被拒绝

# 检查 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

问题 3:无法启动服务

# 查看日志定位问题
# Linux
sudo tail -f /var/log/postgresql/postgresql-16-main.log

# Windows
# 查看事件查看器 -> Windows 日志 -> 应用程序
# 或查看 data/pg_log/ 目录下的日志文件

# 常见原因:
# 1. 数据目录权限不正确
# 2. 端口被占用
# 3. postmaster.pid 残留文件
评论区
评论列表
menu