《深入浅出PostgreSQL》代码。
https://book.douban.com/subject/35005283/
深入浅出PostgreSQL
作者: 屠要峰
出版社: 电子工业出版社
页数: 464
定价: 99元
装帧: 平装-胶订
ISBN: 9787121369018
豆瓣截图:
注:以下内容复制自豆瓣读书。
《深入浅出PostgreSQL》基于PostgreSQL 10版本,采用“理论+实践”的形式编写,通过大量的实例,详细讲解了PostgreSQL的各种SQL特性、参数配置、备份恢复、性能调优、服务端编程、高可用方案等。
第1篇“准备”,包括初识PostgreSQL、安装和启动PostgreSQL;第2篇“入门”,包括创建数据库和表、数据类型及其运算符、函数、查询和修改数据;第3篇“进阶”,包括索引、视图、触发器、表继承和表分区、管理用户权限和模式、配置和管理数据库服务器、备份和恢复数据;第4篇“高阶”,包括事务、优化SQL语句、优化数据库服务端性能、PL/pgSQL服务端编程、高可用方案。
《深入浅出PostgreSQL》结构清晰、内容翔实、案例丰富、通俗易懂、实用性强,适合对数据库(特别是PostgreSQL)感兴趣的读者自学参考。另外,本书也适合...
屠要峰
研究员、中兴通讯数据库技术专家委员会主任、研究院副院长、CCF信息存储委员会常委、中国开源软件联盟理事。拥有二十多年大型软件系统研发实践经验,主持过大数据、云计算、云存储及分布式数据库等多个大型分布式系统的研发。负责中兴通讯数据智能方向的研发及应用,获省级科技进步一等奖两次。主要研究方向为大数据、云计算、数据库及存储。
陈河堆
现任中兴通讯数据库平台首席专家,PostgreSQL中文社区核心组成员,拥有十几年数据库研发工作经验,曾参与公司自研高性能内存数据库、分布式数据库和分布式缓存等系统的设计和开发,近年来醉心于钻研开源数据库技术,热心推动PostgreSQL在中国地区的推广和应用,积极参与PostgreSQL中文社区系列活动。
------------------第1篇 准备
第1章 初识PostgreSQL 2
1.1 PostgreSQL的起源 2
1.2 PostgreSQL简介 3
-1.2.1 基本概念 3
-1.2.2 存储体系结构 4
-1.2.3 进程体系架构 6
1.3 PostgreSQL 10版本的新特性 6
1.4 小结 7
第2章 安装和启动PostgreSQL 8
2.1 安装PostgreSQL 8
-2.1.1 在Windows中安装PostgreSQL 8
-2.1.2 在Linux中安装PostgreSQL 12
-2.1.3 源码安装PostgreSQL 14
2.2 初始化数据库 17
2.3 数据库的基本配置 18
-2.3.1 配置数据库监听IP和端口 18
-2.3.2 配置数据库错误日志 18
2.4 启动、停止、查看数据库 18
-2.4.1 启动数据库 18
-2.4.2 停止数据库 19
-2.4.3 查看数据库状态 19
2.5 小结 19
------------------第2篇 入门
第3章 创建数据库和表 21
3.1 认识SQL语言 21
-3.1.1 SQL语句类型 21
-3.1.2 SQL数据类型 21
3.2 使用交互式终端psql 22
-3.2.1 连接数据库 22
-3.2.2 常用命令 23
-3.2.3 使用技巧 26
3.3 表空间的创建、修改和删除 27
-3.3.1 【实例1】创建表空间 27
-3.3.2 【实例2】修改表空间 29
-3.3.3 【实例3】删除表空间 29
3.4 数据库的创建、修改和删除 30
-3.4.1 【实例4】创建数据库 30
-3.4.2 【实例5】修改数据库 31
-3.4.3 【实例6】删除数据库 32
3.5 创建数据表 32
-3.5.1 创建表的语法格式 32
-3.5.2 使用CHECK约束 35
-3.5.3 使用非空约束 36
-3.5.4 使用唯一性约束 36
-3.5.5 使用主键约束 37
-3.5.6 使用默认约束 38
-3.5.7 使用外键约束 38
-3.5.8 【实例7】设置表的属性值自动增加 40
-3.5.9 【实例8】查看表结构 41
3.6 修改数据表 42
-3.6.1 【实例9】修改表名 42
-3.6.2 【实例10】修改字段名 43
-3.6.3 【实例11】添加字段 43
-3.6.4 【实例12】删除字段 44
-3.6.5 【实例13】删除表的外键约束 44
3.7 删除数据表 46
-3.7.1 【实例14】删除没有被关联的表 46
-3.7.2 【实例15】删除被其他表关联的主表 46
3.8 数据的插入、修改和删除 47
-3.8.1 【实例16】向表中插入数据 47
-3.8.2 【实例17】修改表中的数据 48
-3.8.3 【实例18】删除表中的数据 49
3.9 数据的简单查询 50
-3.9.1 【实例19】创建最简单的单表查询 50
-3.9.2 【实例20】创建带过滤条件的查询 50
3.10 小结 51
第4章 数据类型及其运算符 52
4.1 数值类型 52
-4.1.1 整数类型 52
-4.1.2 任意精度数字类型 53
-4.1.3 浮点类型 53
-4.1.4 序列类型 54
-4.1.5 货币类型 55
-4.1.6 【实例21】使用数学运算符 55
4.2 字符串类型 56
-4.2.1 字符串类型分类 57
-4.2.2 使用连接运算符 57
-4.2.3 使用模式匹配运算符 58
4.3 二进制数据类型 60
-4.3.1 二进制数据类型简介 60
-4.3.2 二进制数据的十六进制格式 61
-4.3.3 二进制数据的转义格式 61
4.4 日期类型和时间类型 61
-4.4.1 日期类型和时间类型分类 61
-4.4.2 日期类型和时间类型输入格式 62
-4.4.3 日期类型和时间类型输出格式 64
-4.4.4 时区 64
-4.4.5 使用日期类型和时间类型运算符 65
4.5 布尔类型 66
-4.5.1 布尔类型简介 66
-4.5.2 布尔类型运算符 66
4.6 位串类型 68
-4.6.1 位串类型简介 68
-4.6.2 【实例22】使用位串类型运算符 68
4.7 枚举类型 69
-4.7.1 声明枚举类型 69
-4.7.2 排序 69
-4.7.3 注意枚举类型安全性 70
4.8 几何类型 71
-4.8.1 点(point) 71
-4.8.2 线(line) 72
-4.8.3 线段(lseg) 72
-4.8.4 矩形(box) 73
-4.8.5 路径(path) 74
-4.8.6 多边形(polygon) 75
-4.8.7 圆(circle) 75
-4.8.8 【实例23】使用几何类型运算符 76
4.9 JSON数据类型 77
-4.9.1 JSON数据类型简介 77
-4.9.2 JSON数据类型的输入/输出语法 78
-4.9.3 【实例24】使用json运算符 79
-4.9.4 【实例25】使用jsonb运算符 79
4.10 范围类型 80
-4.10.1 内建范围类型 80
-4.10.2 范围类型的边界 81
-4.10.3 范围值的输入 81
-4.10.4 使用范围类型运算符 82
-4.10.5 【实例26】定义自己的范围类型 83
4.11 数组类型 83
-4.11.1 定义数组类型 84
-4.11.2 输入数组 84
-4.11.3 访问数组 86
-4.11.4 修改数组 87
-4.11.5 查找数组中的内容 88
-4.11.6 数组运算符 89
4.12 小结 89
第5章 函数 90
5.1 数学函数 90
-5.1.1 认识数学函数 90
-5.1.2 【实例27】用数学函数对小数取整 93
5.2 字符串函数 94
-5.2.1 认识字符串函数 95
-5.2.2 认识二进制字符串函数 99
-5.2.3 【实例28】用format()函数格式化输出 101
5.3 数据类型格式化函数 103
5.4 序列函数 104
-5.4.1 认识序列函数 104
-5.4.2 【实例29】创建及使用序列函数 104
5.5 日期函数和时间函数 107
-5.5.1 认识日期函数和时间函数 107
-5.5.2 【实例30】用AT TIME ZONE进行时区转换 110
-5.5.3 【实例31】获取当前的日期和时间 111
-5.5.4 【实例32】设置延时执行 112
5.6 位串函数 113
-5.6.1 认识位串函数 113
-5.6.2 【实例33】用bit()函数转换整数和位串 113
5.7 枚举函数 114
-5.7.1 认识枚举函数 114
-5.7.2 【实例34】用枚举函数获取枚举类型中的值 114
5.8 几何函数 115
-5.8.1 认识几何函数 115
-5.8.2 【实例35】用area()函数计算几何类型的面积 117
5.9 JSON函数 117
-5.9.1 JSON创建函数 117
-5.9.2 JSON处理函数 118
-5.9.3 【实例36】用to_json()函数将字符串转换成JSON格式 122
-5.9.4 【实例37】用json_array_length()函数统计JSON数据类型中的元素个数 122
5.10 范围函数 123
-5.10.1 认识范围函数 123
-5.10.2 【实例38】用range_merge()函数获取一个包含给定范围的最小范围 123
-5.10.3 【实例39】用upper_inc()函数判断上界是否被包含在范围内 123
5.11 数组函数 124
-5.11.1 认识数组函数 124
-5.11.2 【实例40】用array_position()函数在数组中检索数据 125
-5.11.3 【实例41】用array_to_string()函数将数组转为字符串 126
5.12 其他函数 126
-5.12.1 聚合函数 126
-5.12.2 集合返回函数 131
-5.12.3 系统信息函数 131
-5.12.4 系统管理函数 133
5.13 小结 134
第6章 查询和修改数据 135
6.1 SELECT语法 135
6.2 单表查询 136
-6.2.1 【实例42】简单查询 136
-6.2.2 【实例43】等值查询 137
-6.2.3 【实例44】范围查询 137
-6.2.4 【实例45】去重 138
-6.2.5 【实例46】排序 140
-6.2.6 【实例47】分组 140
-6.2.7 【实例48】分页 141
6.3 多表查询 142
-6.3.1 【实例49】内连接 143
-6.3.2 【实例50】外连接 144
-6.3.3 【实例51】交叉连接 146
-6.3.4 【实例52】多表关联复合查询 146
6.4 子查询 147
-6.4.1 【实例53】IN/NOT IN 子查询 147
-6.4.2 【实例54】EXISTS/NOT EXISTS子查询 148
-6.4.3 【实例55】ANY/SOME/ALL子查询 149
6.5 模糊匹配查询 150
-6.5.1 【实例56】LIKE查询 150
-6.5.2 【实例57】SIMILAR TO查询 152
6.6 查询运算 152
-6.6.1 【实例58】聚集运算 152
-6.6.2 【实例59】分组运算 154
-6.6.3 【实例60】表达式运算 156
-6.6.4 【实例61】递归查询 157
6.7 窗口函数 158
6.8 高级操作 162
-6.8.1 【实例62】归并数据 162
-6.8.2 【实例63】批量插入 164
-6.8.3 【实例64】批量更新 165
-6.8.4 【实例65】关联更新 166
-6.8.5 【实例66】批量删除 166
-6.8.6 【实例67】关联删除 166
-6.8.7 【实例68】移动数据到历史表 167
-6.8.8 【实例69】清空表 167
6.9 小结 168
------------------第3篇 进阶
第7章 索引 170
7.1 索引简介 170
-7.1.1 索引的含义和作用 170
-7.1.2 索引的分类 171
-7.1.3 索引的设计原则 172
7.2 索引操作 172
-7.2.1 创建索引 172
-7.2.2 修改索引 174
-7.2.3 删除索引 175
7.3 常用索引方法 176
-7.3.1 多列索引 176
-7.3.2 组合索引 177
-7.3.3 唯一索引 177
-7.3.4 表达式索引 178
-7.3.5 部分索引 178
-7.3.6 索引与排序 180
7.4 索引类型 180
-7.4.1 B-tree索引 180
-7.4.2 Hash索引 181
-7.4.3 GiST索引 182
-7.4.4 SP-GiST索引 184
-7.4.5 GIN索引 185
-7.4.6 BRIN索引 186
7.5 索引使用案例 187
-7.5.1 【实例70】用GiST索引提升RANGE类型数据的查询性能 187
-7.5.2 【实例71】用SP-GiST索引快速查找几何空间数据 189
-7.5.3 【实例72】用GIN索引快速查找JSON数据 190
-7.5.4 【实例73】用BRIN索引快速检索时间类型数据 192
7.6 小结 194
第8章 视图 195
8.1 为什么使用视图 195
8.2 普通视图 195
-8.2.1 创建视图 196
-8.2.2 使用视图 198
8.3 物化视图 201
-8.3.1 物化视图和普通视图的区别 201
-8.3.2 创建和刷新物化视图 201
-8.3.3 【实例74】用物化视图优化查询性能 203
8.4 小结 205
第9章 触发器 206
9.1 常规触发器 206
-9.1.1 了解常规触发器 206
-9.1.2 【实例75】创建触发器 208
-9.1.3 【实例76】修改触发器 211
-9.1.4 【实例77】删除触发器 212
-9.1.5 【实例78】注意数据变更的可见性 213
9.2 事件触发器 214
-9.2.1 事件触发器支持的事件 214
-9.2.2 【实例79】创建一个具有数据库审计功能的事件触发器 215
9.3 小结 217
第10章 表继承和表分区 218
10.1 表继承 218
-10.1.1 表继承的使用场景 218
-10.1.2 【实例80】创建表继承 219
-10.1.3 【实例81】使用表继承 221
-10.1.4 确定表继承数据来源 228
-10.1.5 表继承的局限性和注意事项 230
10.2 表分区 231
-10.2.1 表分区的使用场景 231
-10.2.2 表分区的实现方式 232
-10.2.3 【实例82】创建表分区 233
-10.2.4 【实例83】使用表分区 235
-10.2.5 【实例84】维护表分区 237
-10.2.6 使用约束排除提升查询性能 240
-10.2.7 表分区注意事项 243
10.3 小结 243
第11章 管理用户权限和模式 244
11.1 了解用户、角色和权限 244
11.2 管理用户、角色和权限 245
-11.2.1 【实例85】创建用户 245
-11.2.2 【实例86】删除用户 246
-11.2.3 【实例87】创建角色 247
-11.2.4 【实例88】删除角色 249
-11.2.5 【实例89】给角色授予权限 250
-11.2.6 【实例90】使用系统默认角色 251
11.3 管理数据库模式 252
-11.3.1 【实例91】使用数据库模式 252
-11.3.2 【实例92】设置模式的搜索路径 253
-11.3.3 管理数据库模式权限 254
-11.3.4 pg_catalog模式 254
11.4 小结 255
第12章 配置和管理数据库服务器 256
12.1 用不同方式进行参数设置 256
-12.1.1 了解参数格式 256
-12.1.2 【实例93】通过配置文件设置参数 257
-12.1.3 【实例94】通过SQL命令设置参数 259
-12.1.4 【实例95】通过shell命令设置参数 261
-12.1.5 【实例96】用include方式管理配置文件 262
12.2 配置postgresql.conf文件的参数 262
-12.2.1 连接和安全认证参数 263
-12.2.2 缓存和存储参数 264
-12.2.3 WAL日志参数 266
-12.2.4 错误日志参数 267
-12.2.5 AUTOVACUUM参数 274
12.3 配置pg_hba.conf文件的参数 274
-12.3.1 了解不同客户端认证方法 275
-12.3.2 【实例97】用trust配置客户端认证 276
-12.3.3 【实例98】用md5配置客户端认证 277
-12.3.4 【实例99】用cert配置客户端认证 277
12.4 服务端常用工具 277
-12.4.1 【实例100】用initdb初始化数据库 277
-12.4.2 【实例101】用pg_ctl管理数据库服务 278
-12.4.3 【实例102】用pg_controldata查看控制信息 280
-12.4.4 【实例103】用pg_rewind同步数据目录 282
12.5 小结 283
第13章 备份和恢复数据 284
13.1 逻辑备份和恢复 284
-13.1.1 【实例104】用pg_dump工具备份单库单表数据 284
-13.1.2 【实例105】用pg_restore工具恢复数据 287
-13.1.3 【实例106】用pg_dumpall工具备份所有库表数据 289
-13.1.4 【实例107】用psql工具恢复pg_dumpall备份的数据 289
13.2 物理备份和恢复 289
-13.2.1 【实例108】用pg_basebackup工具热备份 290
-13.2.2 【实例109】用基础备份恢复数据 292
13.3 增量备份和恢复 293
-13.3.1 【实例110】用归档日志进行增量备份 293
-13.3.2 【实例111】将数据库状态恢复到指定时间点 294
-13.3.3 【实例112】恢复到指定事务 297
13.4 第三方备份恢复工具 299
-13.4.1 认识pg_rman工具 299
-13.4.2 【实例113】用pg_rman工具备份数据 301
13.5 小结 304
------------------第4篇 高阶
第14章 事务 306
14.1 事务的基本特性 306
-14.1.1 事务模型要解决的问题 306
-14.1.2 事务的四大特性 307
-14.1.3 【实例114】设置合适的事务隔离级别 308
14.2 理解事务的实现原理 310
-14.2.1 WAL机制 310
-14.2.2 MVCC机制 311
-14.2.3 Checkpoint机制 314
-14.2.4 Crash Recovery机制 315
-14.2.5 事务并发与锁机制 316
14.3 使用事务 319
-14.3.1 理解事务语法 319
-14.3.2 【实例115】用ROLLBACK回滚事务 320
-14.3.3 【实例116】用COMMIT提交事务 321
-14.3.4 【实例117】用SAVEPOINT回滚部分事务 321
14.4 小结 323
第15章 优化SQL语句 324
15.1 理解查询优化器的工作原理 324
-15.1.1 SQL语句执行过程 324
-15.1.2 了解查询树 325
-15.1.3 了解逻辑优化 326
-15.1.4 逻辑优化:对子查询进行优化 326
-15.1.5 逻辑优化:条件表达式优化及等价谓词重写优化 327
-15.1.6 逻辑优化:外连接优化 328
-15.1.7 了解物理优化 329
15.1.8 代价估算 332
15.2 查看并分析执行计划 334
-15.2.1 EXPLAIN命令介绍 334
-15.2.2 EXPLAIN输出解读 336
-15.2.3 【实例118】用EXPLAIN分析执行计划 338
15.3 常见SQL语句优化 343
-15.3.1 【实例119】用索引避免表扫描 343
-15.3.2 【实例120】子查询优化 345
15.3.3 【实例121】表连接优化 347
-15.3.4 【实例122】用UNION ALL代替UNION 349
-15.3.5 【实例123】避免使用“SELECT *” 350
-15.3.6 【实例124】为jsonb字段建立合适的索引 351
15.4 小结 352
第16章 优化数据库服务端性能 353
16.1 了解数据库性能指标 353
-16.1.1 衡量数据库性能的指标 353
-16.1.2 影响数据库性能的硬件因素 353
-16.1.3 【实例125】用nmon工具监控Linux性能 356
16.2 优化存储性能 359
-16.2.1 物理存储介质简介 359
-16.2.2 存储路径隔离原则 361
16.3 优化数据库配置参数 366
-16.3.1 优化内存资源类参数 366
-16.3.2 优化脏页刷写类参数 368
-16.3.3 优化空间回收类参数 369
-16.3.4 优化WAL日志文件相关参数 372
-16.3.5 数据库性能视图 376
16.4 小结 383
第17章 PL/pgSQL服务端编程 384
17.1 PL/pgSQL编程基础 384
-17.1.1 PL/pgSQL的结构 384
-17.1.2 PL/pgSQL的声明 386
-17.1.3 PL/pgSQL的表达式 389
-17.1.4 PL/pgSQL的基本语句 389
-17.1.5 PL/pgSQL的控制结构 392
-17.1.6 PL/pgSQL的游标 399
-17.1.7 PL/pgSQL的错误和消息 401
-17.1.8 PL/pgSQL的触发器函数 402
17.2 PL/pgSQL 编程实战 405
-17.2.1 PL/pgSQL开发建议 405
-17.2.2 【实例126】编写一个自定义用户函数 407
-17.2.3 【实例127】从PL/SQL移植到PL/pgSQL 409
17.3 小结 411
第18章 高可用方案 412
18.1 如何实现高可用方案 412
-18.1.1 基本概念 412
-18.1.2 实现自动故障接管(Failover) 414
-18.1.3 WAL归档与流复制 415
-18.1.4 防止WAL日志文件被过早删除 418
-18.1.5 巧用级联复制 419
-18.1.6 同步复制与读写分离 420
18.2 【实例128】基于Corosync+Pacemaker的方案 424
-18.2.1 初识Corosync和Pacemaker 424
-18.2.2 Corosync和Pacemaker的安装 426
-18.2.3 基于Corosync+Pacemaker的高可用方案及实现 430
18.3 【实例129】基于Stolon的方案 436
-18.3.1 Stolon方案架构及特性 436
-18.3.2 Stolon方案安装配置及【实例 437
18.4 小结 443