第1章 迈出第一步 1
1.1 介绍 1
1.2 获取PostgreSQL 7
1.3 连接到PostgreSQL服务 8
1.4 启用网络/远程用户访问 11
1.5 使用图形化管理工具 12
1.6 使用psql查询和脚本工具 16
1.7 安全地修改你的密码 19
1.8 避免硬编码你的密码 20
1.9 使用连接服务文件 22
1.10 连接失败故障排除 23
第2章 浏览数据库 25
2.1 介绍 25
2.2 当前服务程序的版本号是多少 26
2.3 服务程序运行时间是多少? 27
2.4 定位数据库服务的数据文件 28
2.5 定位数据库服务的日志文件 31
2.6 定位数据库的系统标识 33
2.7 列出数据库服务中的数据库 35
2.8 数据库中有多少张表 38
2.9 一个数据库占用了多少磁盘空间 40
2.10 一张表占用了多少磁盘空间 41
2.11 哪张表是最大的表 42
2.12 表里有多少行记录 43
2.13 快速估算表里的记录总数 44
2.14 列出数据库中的扩展模块 48
2.15 理解对象的依赖关系 49
第3章 配置 52
3.1 介绍 52
3.2 阅读手册(RTFM) 53
3.3 规划一个新数据库 54
3.4 在程序中更改参数 55
3.5 查看当前的配置参数 57
3.6 哪些参数为非默认设置 58
3.7 更新参数文件 60
3.8 为特定用户组设置参数 62
3.9 基本服务配置清单 63
3.10 添加一个外部模块到PostgreSQL服务中 64
3.11 使用已安装的模块 68
3.12 管理已安装的扩展 70
第4章 服务控制 74
4.1 介绍 74
4.2 手动启动数据库服务 75
4.3 安全快速地停止服务 77
4.4 在紧急情况下关闭服务 77
4.5 重新加载服务配置文件 78
4.6 快速重启服务 80
4.7 阻止新的连接 81
4.8 限制每个用户只允许一个会话 83
4.9 断开用户连接 84
4.10 为多租户进行数据库设计 86
4.11 使用多个模式(schema) 87
4.12 单独给用户分配数据库 89
4.13 在一个系统上运行多个服务 90
4.14 配置连接池 92
4.15 在相同的主机和端口上访问多个服务 95
第5章 表和数据 98
5.1 介绍 98
5.2 为数据库对象选择恰当的名称 99
5.3 处理使用双引号括起来的对象名 100
5.4 确保相同的名称和相同的列定义 102
5.5 标记和删除重复数据 106
5.6 避免出现重复行 110
5.7 为一组数据找到一个唯一主键 115
5.8 生成测试数据 117
5.9 随机抽样数据 120
5.10 从电子表格导入数据 122
5.11 从扁平文件导入数据 124
第6章 安全 128
6.1 介绍 128
6.2 PostgreSQL的超级用户 129
6.3 收回用户对表的访问权 130
6.4 赋予用户对表的访问权 134
6.5 建立一个新用户 135
6.6 临时阻止一个用户的连接 137
6.7 删除用户而不删除其数据 138
6.8 检查是否所有的用户都是使用安全的密码 139
6.9 将受限的超级用户权限赋予指定用户 140
6.10 审计DDL的改变 143
6.11 审计数据的改变 145
6.12 总是认清登录的用户 150
6.13 与LDAP集成 152
6.14 使用SSL进行连接 153
6.15 使用SSL证书来验证客户端 155
6.16 映射外部用户为数据库角色 158
6.17 加密敏感数据 159
第7章 数据库管理 164
7.1 介绍 164
7.2 编写一个脚本,要么全部执行成功,要么全部执行失败 165
7.3 编写一个psql脚本,一遇到错误就退出 168
7.4 在多张表上执行多个操作 169
7.5 添加/删除表上的列 174
7.6 更改列的数据类型 175
7.7 更改数据类型的定义 179
7.8 添加/删除模式(schema) 180
7.9 在不同schema之间移动对象 182
7.10 添加/删除表空间 183
7.11 在不同表空间之间移动对象 186
7.12 访问其他PostgreSQL数据库中的对象 189
7.13 访问其他外部数据库中的对象 197
7.14 可更新视图 199
7.15 使用物化视图 204
第8章 监控和诊断 207
8.1 介绍 207
8.2 检查用户是否已经连接上来 211
8.3 检查哪个查询在运行 213
8.4 检查哪个查询正在运行或被阻塞 216
8.5 确定谁阻塞了一个查询 217
8.6 杀掉指定会话 219
8.7 探测未决的准备事务 221
8.8 确定是否某人在使用某张表 222
8.9 确定一张表最后被使用的时间 223
8.10 临时数据使用的磁盘空间 225
8.11 理解查询变慢的原因 227
8.12 调查和报告一个缺陷 230
8.13 生成每日的日志文件错误信息摘要 231
8.14 分析你的查询的实时性能 234
第9章 常规维护 236
9.1 介绍 236
9.2 控制自动数据库维护 237
9.3 避免自动冻结和页损坏 241
9.4 避免事务重叠 243
9.5 移除过期的准备事务 245
9.6 对于大量使用临时表时需要的操作 247
9.7 识别和修复膨胀的表和索引 249
9.8 维护索引 253
9.9 添加约束而不检查已有行 256
9.10 寻找未使用的索引 258
9.11 谨慎删除不必要的索引 260
9.12 维护规划 261
第10章 性能和并发 263
10.1 介绍 263
10.2 寻找执行缓慢的SQL语句 264
10.3 从pg_stat*视图收集常规统计信息 267
10.4 研究是什么让SQL缓慢 269
10.5 减少返回的行 273
10.6 简化复杂的SQL 274
10.7 加速查询的执行,而无须重写 281
10.8 为什么一个查询不使用索引 284
10.9 强制让一个查询使用一个索引 285
10.10 使用乐观锁 287
10.11 报告性能问题 288
第11章 备份和恢复 290
11.1 介绍 290
11.2 理解和控制崩溃恢复 291
11.3 计划备份 293
11.4 对一个数据库进行热逻辑备份 294
11.5 对所有数据库进行热逻辑备份 296
11.6 对一个表空间中的所有表进行热逻辑备份 297
11.7 备份数据库对象的定义 298
11.8 独立的数据库热物理备份 299
11.9 在线物理备份和持续归档 302
11.10 恢复所有的数据库 305
11.11 恢复到一个时间点 308
11.12 恢复一个被删除/损坏的表 310
11.13 恢复一个被删除/损坏的表空间 312
11.14 恢复一个被删除/损坏的数据库 314
11.15 为备份/恢复提速 315
11.16 增量/差异备份和恢复 317
11.17 使用Barman进行热物理备份 319
11.18 使用Barman进行恢复 326
第12章 复制和升级 330
12.1 介绍 330
12.2 复制最佳实践 337
12.3 基于日志文件传送的复制——不推荐使用 338
12.4 建立流复制 341
12.5 建立流复制的安全机制 346
12.6 热备机及读可扩展性 347
12.7 管理流复制 351
12.8 使用repmgr 353
12.9 使用复制槽位 355
12.10 监控复制 357
12.11 性能和同步复制 360
12.12 延迟、暂停和同步复制 362
12.13 逻辑复制 364
12.14 双向复制 367
12.15 归档事务日志数据 370
12.16 升级——小版本 371
12.17 主版本原地升级 372
12.18 主版本在线升级 374