跳转至

第二章:安装与配置

安装 PostgreSQL

Ubuntu/Debian 系统

# 更新包列表
sudo apt update

# 安装 PostgreSQL
sudo apt install postgresql postgresql-contrib

# 查看安装版本
psql --version

CentOS/RHEL 系统

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

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

macOS 系统

# 使用 Homebrew 安装
brew install postgresql@16

# 启动服务
brew services start postgresql@16

Windows 系统

  1. 访问 PostgreSQL 官网
  2. 下载安装程序
  3. 运行安装向导
  4. 设置管理员密码
  5. 选择安装组件

初始配置

1. 连接到 PostgreSQL

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

# 进入 psql 命令行
psql

# 或者直接连接
sudo -u postgres psql

2. 修改管理员密码

-- 修改 postgres 用户密码
ALTER USER postgres WITH PASSWORD 'your_password';

3. 创建新数据库用户

-- 创建新用户
CREATE USER myuser WITH PASSWORD 'mypassword';

-- 授予权限
ALTER USER myuser CREATEDB;

4. 创建新数据库

-- 创建数据库
CREATE DATABASE mydatabase;

-- 将数据库所有权授予用户
ALTER DATABASE mydatabase OWNER TO myuser;

配置文件详解

主要配置文件位置

# Ubuntu/Debian
/etc/postgresql/16/main/

# CentOS/RHEL
/var/lib/pgsql/16/data/

# 主要配置文件
postgresql.conf    # 主配置文件
pg_hba.conf        # 客户端认证配置
pg_ident.conf      # 用户映射配置

postgresql.conf 重要参数

# 连接设置
listen_addresses = 'localhost'          # 监听地址,'*' 表示所有地址
port = 5432                             # 监听端口

# 内存设置
shared_buffers = 128MB                  # 共享缓冲区大小
work_mem = 4MB                          # 每个查询的工作内存
maintenance_work_mem = 64MB             # 维护操作的工作内存

# 日志设置
logging_collector = on                  # 启用日志收集
log_directory = 'pg_log'                # 日志目录
log_filename = 'postgresql-%Y-%m-%d.log' # 日志文件名格式
log_statement = 'none'                  # 日志记录级别:none, ddl, mod, all

# 性能设置
max_connections = 100                   # 最大连接数
effective_cache_size = 4GB              # 有效缓存大小
random_page_cost = 4.0                  # 随机页面访问成本

pg_hba.conf 认证配置

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# 本地连接使用 peer 认证
local   all             all                                     peer

# IPv4 本地连接使用 md5 认证
host    all             all             127.0.0.1/32            md5

# IPv6 本地连接使用 md5 认证
host    all             all             ::1/128                 md5

# 允许特定 IP 连接
host    all             all             192.168.1.0/24          md5

# 允许所有 IP 连接(生产环境慎用)
host    all             all             0.0.0.0/0               md5

常用管理命令

服务管理

# Ubuntu/Debian
sudo systemctl status postgresql
sudo systemctl start postgresql
sudo systemctl stop postgresql
sudo systemctl restart postgresql
sudo systemctl reload postgresql

# 查看日志
sudo tail -f /var/log/postgresql/postgresql-16-main.log

数据库管理

-- 列出所有数据库
\l

-- 连接到数据库
\c database_name

-- 列出所有表
\dt

-- 列出所有用户
\du

-- 查看表结构
\d table_name

-- 查看索引
\di

-- 退出 psql
\q

远程访问配置

1. 修改监听地址

# 编辑 postgresql.conf
sudo nano /etc/postgresql/16/main/postgresql.conf

# 修改 listen_addresses
listen_addresses = '*'

2. 配置认证方式

# 编辑 pg_hba.conf
sudo nano /etc/postgresql/16/main/pg_hba.conf

# 添加远程访问规则
host    all             all             0.0.0.0/0               md5

3. 开放防火墙端口

# Ubuntu/Debian
sudo ufw allow 5432/tcp
sudo ufw reload

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

4. 重启服务

sudo systemctl restart postgresql

性能优化配置

内存优化

# 根据系统内存调整
shared_buffers = 25% of RAM            # 建议系统内存的 25%
work_mem = (RAM - shared_buffers) / max_connections
maintenance_work_mem = 10% of RAM      # 维护操作内存

磁盘优化

# 调整检查点
checkpoint_timeout = 15min             # 检查点超时时间
max_wal_size = 1GB                     # 最大 WAL 大小
min_wal_size = 80MB                    # 最小 WAL 大小

# I/O 设置
effective_io_concurrency = 200         # 并发 I/O 数
random_page_cost = 1.1                 # SSD 设置为 1.1-1.3

连接优化

# 连接池设置
max_connections = 100                  # 根据实际需求调整
superuser_reserved_connections = 3     # 保留给超级用户的连接

# 空闲连接超时
idle_in_transaction_session_timeout = 10min

安全配置

1. 修改默认端口

# 修改 postgresql.conf
port = 5433

2. 限制访问权限

# pg_hba.conf 中限制特定数据库和用户
host    mydb           myuser          192.168.1.0/24          md5

3. SSL 加密

# 启用 SSL
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'

4. 定期备份

# 使用 pg_dump 备份
pg_dump -U postgres -h localhost mydb > backup.sql

# 使用 pg_dumpall 备份所有数据库
pg_dumpall -U postgres -h localhost > alldb_backup.sql

常见问题解决

1. 连接被拒绝

# 检查服务状态
sudo systemctl status postgresql

# 检查监听地址
sudo netstat -tlnp | grep 5432

# 检查 pg_hba.conf 配置

2. 内存不足

# 查看当前内存使用
SELECT * FROM pg_stat_activity;

# 调整内存参数
# 修改 shared_buffers 和 work_mem

3. 磁盘空间不足

# 查看数据库大小
SELECT pg_size_pretty(pg_database_size('mydb'));

# 清理 WAL 日志
SELECT pg_current_wal_lsn();

总结

本章介绍了 PostgreSQL 的安装和配置方法,包括: - 不同操作系统的安装步骤 - 初始配置和用户管理 - 配置文件详解 - 远程访问配置 - 性能优化建议 - 安全配置要点

正确的安装和配置是 PostgreSQL 稳定运行的基础。下一章我们将学习 SQL 基础语法。