第二章: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 使用安装向导
- 下载 PostgreSQL 安装包:https://www.postgresql.org/download/windows/
- 运行安装程序
postgresql-16.x.exe - 选择安装目录和数据目录
- 设置超级用户密码
- 选择端口号(默认 5432)
- 完成安装
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
- 下载 Postgres.app:https://postgresapp.com/
- 将应用拖入 Applications 文件夹
- 点击启动 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 基础,包括数据定义、数据操作和查询语法。