第二章:PostgreSQL 安装与配置

最后更新: 2024-01-01 作者: PostgreSQL Team
页面目录

第二章:PostgreSQL 安装与配置

2.1 环境要求

2.1.1 硬件要求

组件 最低要求 推荐配置
CPU 1 核 4 核以上
内存 1 GB 8 GB 以上
磁盘 10 GB 100 GB+ SSD
系统 Linux/Windows/macOS Linux (Ubuntu/CentOS)

2.1.2 软件要求

  • 操作系统:Linux (Ubuntu 20.04+, CentOS 7+), Windows 10+, macOS 10.14+
  • 依赖库:libssl、libreadline、zlib

2.2 Linux 系统安装

2.2.1 Ubuntu/Debian 安装

# 更新软件包
sudo apt update

# 安装 PostgreSQL
sudo apt install postgresql postgresql-client postgresql-contrib

# 安装扩展
sudo apt install postgresql-16-pgvector  # 向量检索扩展

# 启动服务
sudo systemctl start postgresql
sudo systemctl enable postgresql

# 检查服务状态
sudo systemctl status postgresql

2.2.2 CentOS/RHEL 安装

# 安装 RPM 仓库
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 安装 PostgreSQL
sudo dnf install -y postgresql16-server postgresql16-contrib

# 初始化数据库
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb

# 启动服务
sudo systemctl enable postgresql-16
sudo systemctl start postgresql-16

2.3 Docker 安装

2.3.1 快速启动

# 拉取镜像
docker pull postgres:16

# 运行容器
docker run -d \
  --name postgres-dev \
  -e POSTGRES_PASSWORD=your_password \
  -e POSTGRES_USER=devuser \
  -e POSTGRES_DB=mydb \
  -p 5432:5432 \
  -v postgres_data:/var/lib/postgresql/data \
  postgres:16

2.3.2 Docker Compose 配置

创建 docker-compose.yml

version: '3.8'

services:
  postgres:
    image: postgres:16-alpine
    container_name: postgres-dev
    environment:
      POSTGRES_USER: devuser
      POSTGRES_PASSWORD: your_password
      POSTGRES_DB: mydb
      POSTGRES_INITDB_ARGS: "--encoding=UTF8"
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U devuser -d mydb"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - postgres-net

volumes:
  postgres_data:

networks:
  postgres-net:
    driver: bridge

启动服务:

# 启动
docker-compose up -d

# 查看日志
docker-compose logs -f postgres

# 停止
docker-compose down

# 停止并删除数据卷
docker-compose down -v

2.4 Windows 系统安装

2.4.1 使用安装向导

  1. 下载 PostgreSQL 安装包:https://www.postgresql.org/download/windows/
  2. 运行安装程序 postgresql-16.x.exe
  3. 选择安装目录和数据目录
  4. 设置超级用户密码
  5. 选择端口号(默认 5432)
  6. 完成安装

2.4.2 使用 Chocolatey

# 安装 PostgreSQL
choco install postgresql -y

# 启动服务
Start-Service postgresql*

2.5 macOS 安装

2.5.1 使用 Homebrew

# 安装 PostgreSQL
brew install postgresql@16

# 启动服务
brew services start postgresql@16

# 连接数据库
psql -U postgres

2.5.2 使用 Postgres.app

  1. 下载 Postgres.app:https://postgresapp.com/
  2. 将应用拖入 Applications 文件夹
  3. 点击启动 PostgreSQL

2.6 psql 客户端连接

2.6.1 本地连接

# 切换到 postgres 用户
sudo -u postgres psql

# 或使用当前用户
psql -U postgres

# 指定数据库连接
psql -U postgres -d mydb

# 指定主机和端口
psql -h localhost -p 5432 -U postgres -d mydb

2.6.2 psql 常用命令

-- 列出所有数据库
\l
-- 或
\list

-- 切换数据库
\c database_name

-- 列出所有表
\dt

-- 列出所有用户/角色
\du

-- 查看表结构
\d table_name

-- 执行外部 SQL 文件
\i /path/to/file.sql

-- 退出
\q

2.7 PostgreSQL 配置

2.7.1 配置文件位置

配置文件 说明
postgresql.conf 主配置文件
pg_hba.conf 客户端认证配置
pg_ident.conf 用户名映射配置

2.7.2 常用配置参数

编辑 postgresql.conf

# 连接配置
listen_addresses = '*'
port = 5432
max_connections = 200

# 内存配置
shared_buffers = 256MB
work_mem = 64MB
maintenance_work_mem = 128MB
effective_cache_size = 1GB

# WAL 配置
wal_level = replica
max_wal_size = 1GB
min_wal_size = 80MB

# 日志配置
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_statement = 'ddl'

# 查询调优
random_page_cost = 1.1
effective_io_concurrency = 200

2.7.3 pg_hba.conf 配置

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# 本地连接
local   all             all                                     trust

# 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

# 拒绝所有远程连接
host    all             all             0.0.0.0/0               reject

2.7.4 配置生效

# 重新加载配置(不需要重启)
sudo -u postgres pg_ctl reload -D /var/lib/postgresql/data

# 重启服务(需要重启)
sudo systemctl restart postgresql

2.8 用户与权限管理

2.8.1 创建用户

-- 使用 psql 创建用户
sudo -u postgres createuser -P username

-- 使用 SQL 创建用户
CREATE USER devuser WITH PASSWORD 'your_password';

-- 创建超级用户
CREATE USER dba WITH SUPERUSER PASSWORD 'your_password';

-- 创建带有创建数据库权限的用户
CREATE USER dev WITH CREATEDB PASSWORD 'your_password';

2.8.2 修改用户

-- 修改密码
ALTER USER devuser WITH PASSWORD 'new_password';

-- 授予超级用户权限
ALTER USER devuser WITH SUPERUSER;

-- 撤销超级用户权限
ALTER USER devuser WITH NOSUPERUSER;

-- 设置角色有效期
ALTER USER devuser VALID UNTIL '2025-12-31';

2.8.3 创建数据库

-- 创建数据库
CREATE DATABASE mydb OWNER devuser;

-- 创建带编码的数据库
CREATE DATABASE mydb
  WITH OWNER = devuser
  ENCODING = 'UTF8'
  LC_COLLATE = 'en_US.UTF-8'
  LC_CTYPE = 'en_US.UTF-8';

-- 列出所有数据库
SELECT datname FROM pg_database WHERE datistemplate = false;

2.8.4 权限管理

-- 授予权限
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO devuser;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO devuser;

-- 授予架构权限
GRANT USAGE ON SCHEMA public TO devuser;

-- 授予所有表权限
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO devuser;

-- 撤销权限
REVOKE DELETE ON ALL TABLES IN SCHEMA public FROM devuser;

-- 设置默认权限
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO devuser;

2.9 远程连接配置

2.9.1 修改 pg_hba.conf

# 允许指定 IP 连接
host    all             all             10.0.0.0/8              scram-sha-256
host    all             all             192.168.1.0/24          scram-sha-256

2.9.2 修改 postgresql.conf

listen_addresses = '*'  # 监听所有地址

2.9.3 防火墙配置

# Ubuntu/Debian
sudo ufw allow 5432/tcp

# CentOS/RHEL
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --reload

2.9.4 远程连接示例

# 使用 psql 连接
psql -h your_server_ip -p 5432 -U username -d database_name

# 使用 pgAdmin 连接
# Host: your_server_ip
# Port: 5432
# Database: database_name
# Username: username
# Password: your_password

2.10 本章小结

本章介绍了 PostgreSQL 的多种安装方式和配置方法:

  • ✅ Linux 系统安装(Ubuntu、CentOS)
  • ✅ Docker 容器化部署
  • ✅ Windows 和 macOS 安装
  • ✅ 配置文件详解
  • ✅ 用户与权限管理
  • ✅ 远程连接配置

📌 下一章预告

下一章将介绍 PostgreSQL 的 SQL 基础,包括数据定义、数据操作和查询语法。