第1章 PostgreSQL系统概述 1
1.1 PostgreSQL简介及发展历程 1
1.2 PostgreSQL的特性 2
1.3 PostgreSQL的应用 3
1.4 PostgreSQL代码结构 3
1.5安装PostgreSQL 4
1.6 PostgreSQL数据库命令 5
第2章 PostgreSQL的体系结构 7
2.1系统表 8
2.1.1主要系统表功能及依赖关系 8
2.1.2系统视图 14
2.2数据集簇 15
2.2.1 initdb的使用 17
2.2.2 postgres.bki 17
2.2.3 initdb的执行过程 19
2.2.4系统数据库 20
2.3 PostgreSQL进程结构 21
2.4守护进程Postmaster 22
2.4.1初始化内存上下文 23
2.4.2配置参数 23
2.4.3创建监听套接字 28
2.4.4注册信号处理函数 29
2.4.5辅助进程启动 31
2.4.6装载客户端认证文件 32
2.4.7循环等待客户连接请求 33
2.5辅助进程 34
2.5.1 SysLogger系统日志进程 34
2.5.2 BgWriter后台写进程 36
2.5.3 WalWriter预写式日志写进程 38
2.5.4 PgArch预写式日志归档进程 40
2.5.5 AutoVacuum系统自动清理进程 41
2.5.6 PgStat统计数据收集进程 44
2.6服务进程Postgres 47
2.6.1初始化内存环境 48
2.6.2配置运行参数和处理客户端传递的GUC参数 48
2.6.3设置信号处理和信号屏蔽 48
2.6.4初始化Postgres的运行环境 49
2.6.5创建内存上下文并设置查询取消跳跃点 50
2.6.6循环等待处理查询 50
2.6.7简单查询的执行流程 52
2.7小结 53
第3章 存储管理 54
3.1存储管理器的体系结构 54
3.2外存管理 57
3.2.1表和元组的组织方式 58
3.2.2磁盘管理器 60
3.2.3 VFD机制 61
3.2.4空闲空间映射表 64
3.2.5可见性映射表 69
3.2.6大数据存储 69
3.3内存管理 76
3.3.1内存上下文概述 77
3.3.2高速缓存 84
3.3.3缓冲池管理 94
3.3.4 IPC 102
3.4表操作与元组操作 106
3.4.1表操作 106
3.4.2元组操作 112
3.5 VACUUM机制 115
3.5.1 VACUUM操作 115
3.5.2 Lazy VACUUM 116
3.5.3 Full VACUUM 118
3.6 ResourceOwner资源跟踪 120
3.7小结 122
第4章 索引 123
4.1概述 123
4.1.1索引方式 124
4.1.2索引类型 125
4.1.3索引相关系统表 125
4.1.4索引的操作函数 129
4.2 B-Tree索引 131
4.2.1 B-Tree索引的组织结构 132
4.2.2 B-Tree索引的操作 135
4.3 Hash索引 146
4.3.1 Hash索引的组织结构 147
4.3.2 Hash索引的实现 153
4.4 GiST索引 161
4.4.1 GiST的扩展性 161
4.4.2 GiST索引的组织结构 162
4.4.3 GiST索引的实现 163
4.4.4 GiST索引实例 166
4.5 GIN索引 168
4.5.1 GIN索引的扩展性 168
4.5.2 GIN索引的组织结构 170
4.5.3 GIN索引的操作 172
4.6 TSearch2全文搜索 179
4.6.1全文索引的创建 180
4.6.2全文索引的查询 184
4.6.3查询结果处理 185
4.7小结 186
第5章 查询编译 187
5.1概述 187
5.2查询分析 188
5.2.1 Lex和Yacc简介 189
5.2.2词法和语法分析 193
5.2.3语义分析 208
5.3查询重写 218
5.3.1规则系统 219
5.3.2查询重写的处理操作 224
5.4查询规划 228
5.4.1总体处理流程 229
5.4.2预处理 237
5.4.3生成路径 240
5.4.4生成可优化的MIN MAX聚集计划 253
5.4.5生成普通计划 254
5.4.6生成完整计划 257
5.4.7整理计划树 259
5.4.8实例分析 260
5.5代价估计 266
5.5.1代价估算公式 267
5.5.2选择度 268
5.5.3单个表的扫描代价 268
5.5.4两个表的连接代价 268
5.6 PostgreSQL中的遗传算法 268
5.6.1个体编码方式及种群初始化 269
5.6.2适应值 270
5.6.3父体选择策略 270
5.6.4杂交算子 270
5.6.5变异算子 275
5.6.6终止条件 275
5.6.7基于排列生成路径 276
5.6.8实例分析 276
5.7小结 280
第6章 查询执行 282
6.1查询执行策略 283
6.1.1可优化语句和数据定义语句 284
6.1.2四种执行策略 284
6.1.3策略选择的实现 286
6.1.4 Portal执行的过程 288
6.2数据定义语句执行 289
6.2.1数据定义语句执行流程 289
6.2.2执行实例 290
6.2.3主要的功能处理器函数 293
6.3可优化语句执行 293
6.3.1物理代数与处理模型 294
6.3.2物理操作符的数据结构 295
6.3.3执行器的运行 297
6.3.4执行实例 301
6.4计划节点 303
6.4.1控制节点 304
6.4.2扫描节点 310
6.4.3物化节点 319
6.4.4连接节点 328
6.5其他子功能介绍 334
6.5.1元组操作 334
6.5.2表达式计算 337
6.5.3投影操作 340
6.6小结 342
第7章 事务处理与并发控制 343
7.1事务系统简介 343
7.2事务系统的上层 344
7.2.1事务块状态 345
7.2.2事务块操作 346
7.3事务系统的底层 348
7.3.1事务状态 348
7.3.2事务操作函数 350
7.3.3简单查询事务执行过程实例 352
7.4事务保存点和子事务 353
7.4.1保存点实现原理 353
7.4.2子事务 353
7.5两阶段提交 354
7.5.1预提交阶段 354
7.5.2全局提交阶段 355
7.6 PostgreSQL的并发控制 355
7.7 PostgreSQL中的三种锁 357
7.7.1 SpinLock 357
7.7.2 LWLock 358
7.7.3 RegularLock 360
7.8锁管理机制 368
7.8.1表粒度的锁操作 368
7.8.2页粒度的锁操作 369
7.8.3元组粒度的锁操作 369
7.8.4事务粒度的锁操作 369
7.8.5一般对象的锁操作 369
7.9死锁处理机制 370
7.9.1死锁处理相关数据结构 371
7.9.2死锁处理相关操作 372
7.10多版本并发控制 373
7.10.1 MVCC相关数据结构 373
7.10.2 MVCC相关操作 375
7.10.3 MVCC与快照 379
7.11日志管理 380
7.11.1 SLRU缓冲池 381
7.11.2 CLOG日志管理器 386
7.11.3 SUBTRANS日志管理器 390
7.11.4 MULTIXACT日志管理器 392
7.11.5 XLOG日志管理器 394
7.11.6日志管理器总结 402
7.12小结 403
第8章 数据库安全 404
8.1 PostgreSQL安全简介 404
8.2用户标识和认证 405
8.2.1客户端配置文件 406
8.2.2认证方法 408
8.2.3客户端认证 410
8.3基于角色的权限管理 413
8.3.1用户和角色 413
8.3.2角色相关的系统表 415
8.3.3角色管理 416
8.4对象访问控制 426
8.4.1访问控制列表 426
8.4.2对象权限管理 428
8.4.3对象权限检查 432
8.5小结 433
附录A用Eclipse开发和调试PostgreSQL 434