描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111603467
编辑推荐
这是一本值得存放于身旁的PostgreSQL参考书,特别是性能分析、集群、分片、地理信息等高技术含量的章节,可以作为日常工作的有效参考。本书基于新的PostgreSQL 10版本,重点在于通过实际操作为读者全方位解读PostgreSQL。从安装配置、连接使用、数据管理、体系架构,到NoSQL操作、性能优化、集群部署、分布式、分片、地理信息,面面俱到。
内容简介
本书由数据库专业开发人员撰写,系统介绍PostgreSQL10的丰富特性,及其在生产实践运维中的技巧,全书分为基础篇、核心篇、进阶篇,共18章。基础篇包括第1~4章,主要介绍PostgreSQL基础知识,例如安装与配置、客户端工具、数据类型、SQL高级特性等,为读者阅读核心篇和进阶篇做好准备;核心篇包括第5-9章,主要介绍PostgreSQL核心内容,例如体系结构、并行查询、事务与并发控制、分区表等;进阶篇包括第10~18章,主要介绍PostgreSQL高级内容,例如性能优化、物理复制、逻辑复制、备份与恢复、高可用、版本升级、扩展模块、Oracle数据库迁移PostgreSQL实战、PostGIS等。
目 录
Contents 目录
序言
前言
基 础 篇
第1章 安装与配置基础2
1.1 初识PostgreSQL2
1.1.1 PostgreSQL的特点3
1.1.2 许可3
1.1.3 邮件列表和讨论区3
1.2 安装PostgreSQL3
1.2.1 通过yum源安装4
1.2.2 通过源码编译安装5
1.2.3 设置一个软链接7
1.3 客户端程序和服务器程序8
1.3.1 客户端程序8
1.3.2 服务器程序11
1.4 创建数据库实例11
1.4.1 创建操作系统用户11
1.4.2 创建数据目录12
1.4.3 初始化数据目录13
1.5 启动和停止数据库服务器14
1.5.1 使用service方式15
1.5.2 使用pg_ctl进行管理15
1.5.3 其他启动和关闭数据库服务器的方式16
1.5.4 配置开机启动16
1.6 数据库配置基础17
1.6.1 配置文件的位置17
1.6.2 pg_hba.conf17
1.6.3 postgresql.conf19
1.6.4 允许远程访问数据库20
1.7 本章小结22
第2章 客户端工具23
2.1 pgAdmin 4简介23
2.1.1 pgAdmin 4 安装23
2.1.2 pgAdmin 4 使用23
2.2 psql功能及应用26
2.2.1 使用psql连接数据库26
2.2.2 psql元命令介绍28
2.2.3 psql导入、导出表数据31
2.2.4 psql的语法和选项介绍34
2.2.5 psql执行sql脚本36
2.2.6 psql如何传递变量到SQL37
2.2.7 使用psql定制日常维护脚本38
2.2.8 psql亮点功能39
2.3 本章小结43
第3章 数据类型44
3.1 数字类型44
3.1.1 数字类型列表44
3.1.2 数字类型操作符和数学函数46
3.2 字符类型47
3.2.1 字符类型列表47
3.2.2 字符类型函数48
3.3 时间/日期类型49
3.3.1 时间/日期类型列表49
3.3.2 时间/日期类型操作符50
3.3.3 时间/日期类型常用函数51
3.4 布尔类型52
3.5 网络地址类型53
3.5.1 网络地址类型列表54
3.5.2 网络地址操作符55
3.5.3 网络地址函数56
3.6 数组类型56
3.6.1 数组类型定义56
3.6.2 数组类型值输入56
3.6.3 查询数组元素57
3.6.4 数组元素的追加、删除、更新58
3.6.5 数组操作符58
3.6.6 数组函数59
3.7 范围类型60
3.7.1 范围类型列表60
3.7.2 范围类型边界61
3.7.3 范围类型操作符62
3.7.4 范围类型函数62
3.7.5 给范围类型创建索引63
3.8 json/jsonb类型63
3.8.1 json类型简介63
3.8.2 查询json数据64
3.8.3 jsonb与json差异64
3.8.4 jsonb与json操作符65
3.8.5 jsonb与json函数66
3.8.6 jsonb键/值的追加、删除、更新66
3.9 数据类型转换68
3.9.1 通过格式化函数进行转换68
3.9.2 通过CAST函数进行转换68
3.9.3 通过::操作符进行转换69
3.10 本章小结70
第4章 SQL高级特性71
4.1 WITH查询71
4.1.1 复杂查询使用CTE71
4.1.2 递归查询使用CTE72
4.2 批量插入74
4.2.1 方式一:INSERT INTO…SELECT…74
4.2.2 方式二:INSERT INTO VALUES (),(),…()75
4.2.3 方式三:COPY或COPY元命令75
4.3 RETURNING返回修改的数据76
4.3.1 RETURNING返回插入的数据76
4.3.2 RETURNING返回更新后数据77
4.3.3 RETURNING返回删除的数据77
4.4 UPSERT78
4.4.1 UPSERT场景演示78
4.4.2 UPSERT语法79
4.5 数据抽样80
4.5.1 SYSTEM抽样方式81
4.5.2 BERNOULLI抽样方式82
4.6 聚合函数84
4.6.1 string_agg函数84
4.6.2 array_agg函数85
4.7 窗口函数86
4.7.1 窗口函数语法86
4.7.2 avg() OVER()87
4.7.3 row_number()88
4.7.4 rank()89
4.7.5 dense_rank ()89
4.7.6 lag()90
4.7.7 first_value ()91
4.7.8 last_value ()91
4.7.9 nth_value ()92
4.7.10 窗口函数别名的使用92
4.8 本章小结93
核 心 篇
第5章 体系结构96
5.1 逻辑和物理存储结构96
5.1.1 逻辑存储结构96
5.1.2 物理存储结构97
5.2 进程结构105
5.2.1 守护进程与服务进程105
5.2.2 辅助进程105
5.3 内存结构106
5.3.1 本地内存106
5.3.2 共享内存107
5.4 本章小结107
第6章 并行查询109
6.1 并行查询相关配置参数109
6.2 并行扫描111
6.2.1 并行顺序扫描111
6.2.2 并行索引扫描112
6.2.3 并行index-only扫描114
6.2.4 并行bitmap heap扫描115
6.3 并行聚合117
6.4 多表关联119
6.4.1 Nested loop多表关联120
6.4.2 Merge join多表关联121
6.4.3 Hash join多表关联122
6.5 本章小结124
第7章 事务与并发控制125
7.1 事务和并发控制的概念125
7.1.1 事务的基本概念和性质125
7.1.2 并发引发的现象126
7.1.3 ANSI SQL标准的事务隔离级别129
7.2 PostgreSQL的事务隔离级别130
7.2.1 查看和设置数据库的事务隔离级别131
7.2.2 修改全局的事务隔离级别132
7.2.3 查看当前会话的事务隔离级别132
7.2.4 设置当前会话的事务隔离级别132
7.2.5 设置当前事务的事务隔离级别133
7.3 PostgreSQL的并发控制133
7.3.1 基于锁的并发控制134
7.3.2 基于多版本的并发控制134
7.3.3 通过pageinspect观察MVCC137
7.3.4 使用pg_repack解决表膨胀问题140
7.3.5 支持事务的DDL140
7.4 本章小结141
第8章 分区表142
8.1 分区表的
序言
前言
基 础 篇
第1章 安装与配置基础2
1.1 初识PostgreSQL2
1.1.1 PostgreSQL的特点3
1.1.2 许可3
1.1.3 邮件列表和讨论区3
1.2 安装PostgreSQL3
1.2.1 通过yum源安装4
1.2.2 通过源码编译安装5
1.2.3 设置一个软链接7
1.3 客户端程序和服务器程序8
1.3.1 客户端程序8
1.3.2 服务器程序11
1.4 创建数据库实例11
1.4.1 创建操作系统用户11
1.4.2 创建数据目录12
1.4.3 初始化数据目录13
1.5 启动和停止数据库服务器14
1.5.1 使用service方式15
1.5.2 使用pg_ctl进行管理15
1.5.3 其他启动和关闭数据库服务器的方式16
1.5.4 配置开机启动16
1.6 数据库配置基础17
1.6.1 配置文件的位置17
1.6.2 pg_hba.conf17
1.6.3 postgresql.conf19
1.6.4 允许远程访问数据库20
1.7 本章小结22
第2章 客户端工具23
2.1 pgAdmin 4简介23
2.1.1 pgAdmin 4 安装23
2.1.2 pgAdmin 4 使用23
2.2 psql功能及应用26
2.2.1 使用psql连接数据库26
2.2.2 psql元命令介绍28
2.2.3 psql导入、导出表数据31
2.2.4 psql的语法和选项介绍34
2.2.5 psql执行sql脚本36
2.2.6 psql如何传递变量到SQL37
2.2.7 使用psql定制日常维护脚本38
2.2.8 psql亮点功能39
2.3 本章小结43
第3章 数据类型44
3.1 数字类型44
3.1.1 数字类型列表44
3.1.2 数字类型操作符和数学函数46
3.2 字符类型47
3.2.1 字符类型列表47
3.2.2 字符类型函数48
3.3 时间/日期类型49
3.3.1 时间/日期类型列表49
3.3.2 时间/日期类型操作符50
3.3.3 时间/日期类型常用函数51
3.4 布尔类型52
3.5 网络地址类型53
3.5.1 网络地址类型列表54
3.5.2 网络地址操作符55
3.5.3 网络地址函数56
3.6 数组类型56
3.6.1 数组类型定义56
3.6.2 数组类型值输入56
3.6.3 查询数组元素57
3.6.4 数组元素的追加、删除、更新58
3.6.5 数组操作符58
3.6.6 数组函数59
3.7 范围类型60
3.7.1 范围类型列表60
3.7.2 范围类型边界61
3.7.3 范围类型操作符62
3.7.4 范围类型函数62
3.7.5 给范围类型创建索引63
3.8 json/jsonb类型63
3.8.1 json类型简介63
3.8.2 查询json数据64
3.8.3 jsonb与json差异64
3.8.4 jsonb与json操作符65
3.8.5 jsonb与json函数66
3.8.6 jsonb键/值的追加、删除、更新66
3.9 数据类型转换68
3.9.1 通过格式化函数进行转换68
3.9.2 通过CAST函数进行转换68
3.9.3 通过::操作符进行转换69
3.10 本章小结70
第4章 SQL高级特性71
4.1 WITH查询71
4.1.1 复杂查询使用CTE71
4.1.2 递归查询使用CTE72
4.2 批量插入74
4.2.1 方式一:INSERT INTO…SELECT…74
4.2.2 方式二:INSERT INTO VALUES (),(),…()75
4.2.3 方式三:COPY或COPY元命令75
4.3 RETURNING返回修改的数据76
4.3.1 RETURNING返回插入的数据76
4.3.2 RETURNING返回更新后数据77
4.3.3 RETURNING返回删除的数据77
4.4 UPSERT78
4.4.1 UPSERT场景演示78
4.4.2 UPSERT语法79
4.5 数据抽样80
4.5.1 SYSTEM抽样方式81
4.5.2 BERNOULLI抽样方式82
4.6 聚合函数84
4.6.1 string_agg函数84
4.6.2 array_agg函数85
4.7 窗口函数86
4.7.1 窗口函数语法86
4.7.2 avg() OVER()87
4.7.3 row_number()88
4.7.4 rank()89
4.7.5 dense_rank ()89
4.7.6 lag()90
4.7.7 first_value ()91
4.7.8 last_value ()91
4.7.9 nth_value ()92
4.7.10 窗口函数别名的使用92
4.8 本章小结93
核 心 篇
第5章 体系结构96
5.1 逻辑和物理存储结构96
5.1.1 逻辑存储结构96
5.1.2 物理存储结构97
5.2 进程结构105
5.2.1 守护进程与服务进程105
5.2.2 辅助进程105
5.3 内存结构106
5.3.1 本地内存106
5.3.2 共享内存107
5.4 本章小结107
第6章 并行查询109
6.1 并行查询相关配置参数109
6.2 并行扫描111
6.2.1 并行顺序扫描111
6.2.2 并行索引扫描112
6.2.3 并行index-only扫描114
6.2.4 并行bitmap heap扫描115
6.3 并行聚合117
6.4 多表关联119
6.4.1 Nested loop多表关联120
6.4.2 Merge join多表关联121
6.4.3 Hash join多表关联122
6.5 本章小结124
第7章 事务与并发控制125
7.1 事务和并发控制的概念125
7.1.1 事务的基本概念和性质125
7.1.2 并发引发的现象126
7.1.3 ANSI SQL标准的事务隔离级别129
7.2 PostgreSQL的事务隔离级别130
7.2.1 查看和设置数据库的事务隔离级别131
7.2.2 修改全局的事务隔离级别132
7.2.3 查看当前会话的事务隔离级别132
7.2.4 设置当前会话的事务隔离级别132
7.2.5 设置当前事务的事务隔离级别133
7.3 PostgreSQL的并发控制133
7.3.1 基于锁的并发控制134
7.3.2 基于多版本的并发控制134
7.3.3 通过pageinspect观察MVCC137
7.3.4 使用pg_repack解决表膨胀问题140
7.3.5 支持事务的DDL140
7.4 本章小结141
第8章 分区表142
8.1 分区表的
前 言
Preface 前 言PostgreSQL拥有近三十年的历史,是目前的开源数据库,PostgreSQL具备丰富的企业级特性,尽管在欧美、日本使用非常广泛,但在国内并没有得到广泛使用,产生这种情形的原因是多样的,其中与PostgreSQL中文资料匮乏有较大关系,目前市场上PostgreSQL中文书籍非常少。
笔者从2010年开始从事PostgreSQL DBA工作,在PostgreSQL数据库运维工程中积累了一些经验,因此想系统编写一本PostgreSQL书籍,一方面总结自己在PostgreSQL数据库运维方面的经验,另一方面希望对PostgreSQL从业者有所帮助,同时希望给PostgreSQL在国内的发展贡献一份力量;本书的另一位作者张文升拥有丰富的PostgreSQL运维经验,目前就职于探探科技任首席PostgreSQL DBA,他的加入极大地丰富了此书的内容。
近几年PostgreSQL在国内得到较快的发展,平安科技、去哪儿网、探探科技、斯凯网络等公司都在逐步使用PostgreSQL,目前阿里云、腾讯云、华为云等主流云服务提供商也提供了基于PostgreSQL数据库的云服务,相信PostgreSQL在国内将有更广阔的发展。
本书主要内容本书系统介绍PostgreSQL的丰富特性,以及生产实践运维中的技巧,全书分为基础篇、核心篇、进阶篇。基础篇包括第1~4章,主要介绍PostgreSQL基础知识,例如安装与配置、客户端工具、数据类型、SQL高级特性等,为读者阅读核心篇和进阶篇做好准备;核心篇包括第5~9章,主要介绍PostgreSQL核心内容,例如体系结构、并行查询、事务与并发控制、分区表等;进阶篇包括第10~18章,主要介绍PostgreSQL进阶内容,相比前两篇进阶篇的难度有一定程度增加,例如性能优化、物理复制、逻辑复制、备份与恢复、高可用、版本升级、扩展模块、Oracle数据库迁移PostgreSQL实战、PostGIS等。本书18章主要内容如下。
第1章:介绍PostgreSQL起源、安装、数据库实例创建、数据库配置、数据库的启动和停止等。
第2章:介绍psql命令行客户端工具的使用和特性,例如psql元命令、psql导入导出数据、使用psql执行脚本、psql的亮点功能等。
第3章:介绍PostgreSQL各种数据类型,包括字符类型、时间/日期类型、布尔类型、网络地址类型、数组类型、范围类型、json/jsonb类型等;同时介绍了数据类型相关函数、操作符、数据类型转换。
第4章:主要介绍PostgreSQL支持的一些高级SQL特性,例如WITH查询、批量插入、RETURNING返回DML修改的数据、UPSERT、数据抽样、聚合函数、窗口函数等。
第5章:简单介绍PostgreSQL的逻辑结构和物理结构,以及PostgreSQL的守护进程、服务进程和辅助进程。
第6章:介绍PostgreSQL并行查询相关配置与应用,以及多表关联中并行的使用。
第7章:介绍事务的基本概念、性质和事务隔离级别,以及PostgreSQL多版本并发控制的原理和机制。
第8章:介绍传统分区表和内置分区表的部署、分区维护和性能测试。
第9章:介绍PostgreSQL的NoSQL特性,以及PostgreSQL全文检索。
第10章:简单介绍了服务器硬件、操作系统配置对性能的影响,介绍了一些常用的Linux性能监控工具,并着重介绍了对性能影响较大的几个方面,以及性能优化方案。
第11章:着重介绍PostgreSQL内置的测试工具pgbench,以及如何使用pgbench的内置脚本和自定义脚本进行基准测试。
第12章:主要介绍PostgreSQL物理复制和逻辑复制,并结合笔者在数据库维护过程中的实践经验分享了三个典型的流复制维护生产案例。
第13章:重点介绍PostgreSQL物理备份、增量备份,同时演示了数据库恢复的几种场景。
第14章:介绍两种高可用方案,一种是基于Pgpool-II和异步流复制的高可用方案,另一种是基于Keepalived和异步流复制的高可用方案。
第15章:介绍PostgreSQL版本命名规则、支撑策略、历史版本演进,介绍了小版本升级,后重点介绍了大版本升级的三种方式。
第16章:主要介绍一些常见的外部扩展,例如file_fdw、pg_stat_statements、auto_explain、postgres_fdw,并重点介绍Citus外部扩展。
第17章:从实际案例出发,分享了一个Oracle数据库迁移到PostgreSQL数据库的实际项目。
第18章:简单介绍PostGIS部署、几何对象的输入、输出、存储、运算,后介绍了PostGIS的一个典型应用场景:圈人与地理围栏。
本书特点本书不是PostgreSQL入门书籍,不会介绍PostgreSQL每个基础知识点,本书从PostgreSQL生产实践运维出发,对PostgreSQL重点内容进行详细讲解并给出演示示例,是一本PostgreSQL数据库运维实战书籍。
本书基于PostgreSQL 10编写,书中涵盖了大量PostgreSQL 10重量级新特性,例如内置分区表、逻辑复制、并行查询增强、同步复制优选提交等,通过阅读此书,读者能够学习到PostgreSQL 10重量级新特性。
本书共18章,如果你对PostgreSQL有一定的运维经验,完全可以不按章节顺序,而是选择比较关注的章节进行阅读。如果你完全没有PostgreSQL数据库基础,建议先通过其他资料大致掌握PostgreSQL基础知识,再来阅读本书,相信你在此书的阅读过程中能有收获。
读者对象本书适合有一定
笔者从2010年开始从事PostgreSQL DBA工作,在PostgreSQL数据库运维工程中积累了一些经验,因此想系统编写一本PostgreSQL书籍,一方面总结自己在PostgreSQL数据库运维方面的经验,另一方面希望对PostgreSQL从业者有所帮助,同时希望给PostgreSQL在国内的发展贡献一份力量;本书的另一位作者张文升拥有丰富的PostgreSQL运维经验,目前就职于探探科技任首席PostgreSQL DBA,他的加入极大地丰富了此书的内容。
近几年PostgreSQL在国内得到较快的发展,平安科技、去哪儿网、探探科技、斯凯网络等公司都在逐步使用PostgreSQL,目前阿里云、腾讯云、华为云等主流云服务提供商也提供了基于PostgreSQL数据库的云服务,相信PostgreSQL在国内将有更广阔的发展。
本书主要内容本书系统介绍PostgreSQL的丰富特性,以及生产实践运维中的技巧,全书分为基础篇、核心篇、进阶篇。基础篇包括第1~4章,主要介绍PostgreSQL基础知识,例如安装与配置、客户端工具、数据类型、SQL高级特性等,为读者阅读核心篇和进阶篇做好准备;核心篇包括第5~9章,主要介绍PostgreSQL核心内容,例如体系结构、并行查询、事务与并发控制、分区表等;进阶篇包括第10~18章,主要介绍PostgreSQL进阶内容,相比前两篇进阶篇的难度有一定程度增加,例如性能优化、物理复制、逻辑复制、备份与恢复、高可用、版本升级、扩展模块、Oracle数据库迁移PostgreSQL实战、PostGIS等。本书18章主要内容如下。
第1章:介绍PostgreSQL起源、安装、数据库实例创建、数据库配置、数据库的启动和停止等。
第2章:介绍psql命令行客户端工具的使用和特性,例如psql元命令、psql导入导出数据、使用psql执行脚本、psql的亮点功能等。
第3章:介绍PostgreSQL各种数据类型,包括字符类型、时间/日期类型、布尔类型、网络地址类型、数组类型、范围类型、json/jsonb类型等;同时介绍了数据类型相关函数、操作符、数据类型转换。
第4章:主要介绍PostgreSQL支持的一些高级SQL特性,例如WITH查询、批量插入、RETURNING返回DML修改的数据、UPSERT、数据抽样、聚合函数、窗口函数等。
第5章:简单介绍PostgreSQL的逻辑结构和物理结构,以及PostgreSQL的守护进程、服务进程和辅助进程。
第6章:介绍PostgreSQL并行查询相关配置与应用,以及多表关联中并行的使用。
第7章:介绍事务的基本概念、性质和事务隔离级别,以及PostgreSQL多版本并发控制的原理和机制。
第8章:介绍传统分区表和内置分区表的部署、分区维护和性能测试。
第9章:介绍PostgreSQL的NoSQL特性,以及PostgreSQL全文检索。
第10章:简单介绍了服务器硬件、操作系统配置对性能的影响,介绍了一些常用的Linux性能监控工具,并着重介绍了对性能影响较大的几个方面,以及性能优化方案。
第11章:着重介绍PostgreSQL内置的测试工具pgbench,以及如何使用pgbench的内置脚本和自定义脚本进行基准测试。
第12章:主要介绍PostgreSQL物理复制和逻辑复制,并结合笔者在数据库维护过程中的实践经验分享了三个典型的流复制维护生产案例。
第13章:重点介绍PostgreSQL物理备份、增量备份,同时演示了数据库恢复的几种场景。
第14章:介绍两种高可用方案,一种是基于Pgpool-II和异步流复制的高可用方案,另一种是基于Keepalived和异步流复制的高可用方案。
第15章:介绍PostgreSQL版本命名规则、支撑策略、历史版本演进,介绍了小版本升级,后重点介绍了大版本升级的三种方式。
第16章:主要介绍一些常见的外部扩展,例如file_fdw、pg_stat_statements、auto_explain、postgres_fdw,并重点介绍Citus外部扩展。
第17章:从实际案例出发,分享了一个Oracle数据库迁移到PostgreSQL数据库的实际项目。
第18章:简单介绍PostGIS部署、几何对象的输入、输出、存储、运算,后介绍了PostGIS的一个典型应用场景:圈人与地理围栏。
本书特点本书不是PostgreSQL入门书籍,不会介绍PostgreSQL每个基础知识点,本书从PostgreSQL生产实践运维出发,对PostgreSQL重点内容进行详细讲解并给出演示示例,是一本PostgreSQL数据库运维实战书籍。
本书基于PostgreSQL 10编写,书中涵盖了大量PostgreSQL 10重量级新特性,例如内置分区表、逻辑复制、并行查询增强、同步复制优选提交等,通过阅读此书,读者能够学习到PostgreSQL 10重量级新特性。
本书共18章,如果你对PostgreSQL有一定的运维经验,完全可以不按章节顺序,而是选择比较关注的章节进行阅读。如果你完全没有PostgreSQL数据库基础,建议先通过其他资料大致掌握PostgreSQL基础知识,再来阅读本书,相信你在此书的阅读过程中能有收获。
读者对象本书适合有一定
评论
还没有评论。