第一章:环境部署与基础操作
1.1 多平台安装详解
Windows环境
-
图形化安装
-
下载EnterpriseDB安装包(含pgAdmin)
-
关键配置项说明:
# postgresql.conf优化项 max_connections = 200 shared_buffers = 4GB work_mem = 32MB
-
服务管理命令:
net start postgresql-x64-15 pg_ctl restart -D "C:\Program Files\PostgreSQL\15\data"
-
Linux环境(Ubuntu/Debian)
-
APT源安装
# 添加官方源 sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt-get update# 安装特定版本 sudo apt-get install postgresql-15 postgresql-contrib-15
-
编译安装(生产环境推荐)
./configure --prefix=/opt/pg15 --with-python --with-openssl make world make install-world
1.2 数据库初始化实战
命令行工具精讲
# 初始化数据库集群
initdb -D /pgdata --locale=en_US.UTF-8 --encoding=UTF8# 启动服务
pg_ctl start -D /pgdata -l logfile# 创建用户与数据库
createuser --interactive --pwprompt
createdb -O devuser appdb
连接管理
-- 查看活动连接
SELECT pid, usename, application_name, client_addr
FROM pg_stat_activity;-- 强制终止连接
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE state = 'idle';
第二章:SQL语法深度解析
2.1 数据定义语言(DDL)
表设计规范示例
CREATE TABLE products (product_id INT GENERATED ALWAYS AS IDENTITY,product_name VARCHAR(100) NOT NULL,price NUMERIC(10,2) CHECK (price > 0),attributes JSONB,release_date DATE DEFAULT CURRENT_DATE,CONSTRAINT pk_products PRIMARY KEY(product_id)
) PARTITION BY RANGE (release_date);-- 创建分区
CREATE TABLE products_2023 PARTITION OF productsFOR VALUES FROM ('2023-01-01') TO ('2024-01-01');
2.2 数据操作语言(DML)
高级插入技巧
-- 批量插入
INSERT INTO orders (user_id, amount)
SELECT user_id, random()*100
FROM generate_series(1,10000) AS user_id;-- 冲突处理
INSERT INTO users (email, username)
VALUES ('test@example.com', 'user1')
ON CONFLICT (email)
DO UPDATE SET username = EXCLUDED.username;
第三章:性能优化
3.1 索引优化矩阵
场景类型 | 推荐索引 | 创建示例 | 性能提升幅度 |
---|---|---|---|
地理位置查询 | GiST空间索引 | CREATE INDEX idx_gist ON places USING GIST(location); | 查询速度提升200倍 |
全文搜索 | GIN倒排索引 | CREATE INDEX idx_gin ON docs USING GIN(to_tsvector('english', content)); | 搜索延迟降低90% |
时间序列数据 | BRIN块级索引 | CREATE INDEX idx_brin ON sensor_data USING BRIN(ts); | 存储空间减少75% |
3.2 查询执行计划深度解读
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT p.product_name, SUM(o.quantity)
FROM orders o
JOIN products p ON o.product_id = p.product_id
WHERE p.category = 'Electronics'
GROUP BY p.product_name
HAVING SUM(o.quantity) > 100;
执行计划分析步骤:
-
识别全表扫描(Seq Scan)热点
-
检查索引使用情况
-
评估连接策略(Nested Loop/Hash Join/Merge Join)
-
分析排序和聚合操作代价
-
内存使用量监控
第四章:高可用架构实战
4.1 流复制配置
主库配置
# postgresql.conf
wal_level = replica
max_wal_senders = 10# pg_hba.conf
host replication repuser 192.168.1.0/24 md5
从库搭建
pg_basebackup -h master_host -D /pgdata -U repuser -v -P
echo "primary_conninfo = 'host=master_host port=5432 user=repuser'" >> postgresql.auto.conf
touch standby.signal
4.2 故障转移演练
# 手动切换
pg_ctl promote -D /pgdata# 监控状态
SELECT * FROM pg_stat_replication;
第五章:典型业务场景实现
5.1 电商系统核心模块
库存扣减方案
BEGIN;
SELECT * FROM inventory
WHERE product_id = 1001
FOR UPDATE SKIP LOCKED;UPDATE inventory SET stock = stock - 1
WHERE product_id = 1001
AND stock > 0;INSERT INTO orders (...) VALUES (...);
COMMIT;
分库分表示例
-- 使用Citus扩展
CREATE TABLE orders (order_id BIGSERIAL,user_id INT,order_date DATE
) PARTITION BY HASH(user_id);SELECT create_distributed_table('orders', 'user_id');
第六章:运维监控体系
6.1 关键指标监控项
指标类别 | 监控项 | 预警阈值 | 采集方法 |
---|---|---|---|
连接池 | 活跃连接数 | > 80% max_connections | pg_stat_activity |
存储 | 表膨胀率 | > 30% | pgstattuple 扩展 |
查询 | 长事务时间 | > 5分钟 | pg_stat_activity |
复制 | 延迟字节数 | > 16MB | pg_stat_replication |
6.2 自动化维护脚本
#!/bin/bash
# 自动清理旧备份
find /backups -name "*.dump" -mtime +7 -exec rm {} \;# 重建索引
psql -d mydb -c "REINDEX DATABASE mydb;"# 收集统计信息
vacuumdb --analyze --all
附录:扩展资源库
版本特性对比矩阵(v12-v15)
功能 | v12 | v13 | v14 | v15 |
---|---|---|---|---|
并行查询 | 基础支持 | 增强排序 | 分区表并行 | 子查询并行 |
监控 | pg_stat_statements 1.7 | 新增等待事件 | IO统计增强 | 预定义角色 |
JSON | jsonpath | SQL/JSON标准 | JSON_TABLE | 合并函数 |
错误代码速查手册
错误码 | 中文描述 | 应急方案 | 根治措施 |
---|---|---|---|
40P01 | 死锁检测 | 重试事务 | 优化事务顺序 |
53100 | 磁盘空间不足 | 清理归档日志 | 增加存储卷 |
42501 | 权限拒绝 | 临时授权 | 完善权限体系 |