PostgreSQL基础知识( 八 )


题,你只能花钱去请 PostgreSQL 专家级顾问来解决故障或寻找临时解
决方案,这种服务一般都是很昂贵的,而且你不一定能找得到这种专
家 。
不管当前使用的是哪个大版本,你都应该尽快跟进小版本号的更新 。比
如从 9.1.17 升级到 9.1.21,只需要替换二进制文件并重启一下即可 。小
版本仅修改 bug 而不会涉及功能变化,因此这种升级是很安全的,也会
为你降低出问题的概率 。
1.6.2 PostgreSQL 10中引入的新特性
PostgreSQL 10 是目前最新的稳定版,于 2017 年 10 月发布 。从
PostgreSQL 10 开始,PostgreSQL 会以一种新的方式升级其版本号 。在
之前的版本中,发布大版本时变化的是第二位小版本号,比如从PostgreSQL 9.5 到 PostgreSQL 9.6,即使增加了一些比较大的新功能,
也只有小版本号发生变化 。但从 PostgreSQL 10 开始,每个变化较大的
版本都会在主版本号上加一 。因此 PostgreSQL 10 的下一个大版本是
PostgreSQL 11 。这样就与 SQLite、SQL Server、Oracle 等数据库的版本
号策略保持了一致 。
以下是 PostgreSQL 10 中引入的关键新特性 。
提升了查询的并行度
对于并行查询启用了新的优化策略,包括并行位图堆扫描、并行索
引扫描等 。这些增强将使得更多查询语句能被并行执行 。请参考 9.4 节
以了解更多信息 。
逻辑复制
此前版本的 PostgreSQL 中已经支持流复制特性 。通过流复制可以
实现整个 PostgreSQL 服务实例的复制,但该机制有一些固有的缺点:
从节点是只读的,只能用于数据查询,不能对其数据进行修改;从节点
上也不能创建自己独有的表 。逻辑复制解决了这两个问题 。通过逻辑复
制可以实现仅复制单张表或者单个 database(不用复制整个服务实例的
所有数据) 。既然不需要复制整个数据库服务,那么自然从库上就可以
有自己的表和数据,这部分数据是不包含在复制体系中的,因此主从库
上允许不一样 。
针对 JSON 和 JSONB 类型的全文检索
此前的版本中,to_tsvector 函数仅能为文本类型的字段生成全
文检索向量 。现在它已支持处理 JSON 和 JSONB 类型,处理过程中会
忽略其中 key 的部分,而仅包含 value 的部分 。同时 ts_headline 函数
也专为 JSON 和 JSONB 类型做了适配,它可以对 JSON 内容中的关键字进行加亮标记 。详情请参考 5.8.7 节 。
支持 ANSI 标准中的 XMLTABLE 特性
XMLTABLE 特性可以将 XML 文本内容以一种更为简单的方式映射
为普通二维表记录 。该特性在 Oracle 和 IBM DB2 中已支持 。详情请参
见示例 5-41 。
FDW 聚合下推
FDW API 可以将 COUNT(*) 或者 SUM(*) 这种聚合操作推送到远端
节点执行 。postgres_fdw
插件从该特性中受益最大 。此前的版本
中,postgres_fdw 插件在执行聚合操作时,需要把所有相关数据从远
端 PostgreSQL 取到本地然后再进行聚合运算,这极大地影响了整体运
算效率 。
声明式表分区
此前的版本中,实现分区表功能需要借助表继承机制 。表继承机制
的问题在于,用户需要自行编写触发器来实现把数据分流到子表中的过
程 。PostgreSQL 10 引入了 PARTITION BY 语法,利用该语法,用户只
需在创建表时附加 PARTITION BY 子句就可以自动实现表分区 。此后向
父表插入数据时,数据会被分流到子表中,这一切都是自动的,无须用
户预先创建触发器 。请参考 6.1.3 节以了解详情 。
查询性能优化
该版本中对查询性能实现了多方面的优化 。
支持创建多字段统计信息CREATE STATISTICS 命令支持针对多个字段建立统计信息 。具体
请参见示例 9-18 。
支持 IDENTITY 数据类型
新增支持 IDENTITY 自增字段类型,创建表和修改表结构时都可以
使用 。增加该类型是为了在设计表的自增字段时更加符合业界通行做
法 。具体请参见示例 6-2 。
1.6.3 PostgreSQL 9.6中引入的新特性
PostgreSQL 9.6 发布于 2016 年 9 月,是 9.x 系列中的最新版本 。
支持并行查询
9.6 版之前,PostgreSQL 并不能充分地利用系统中的多核能力 。9.6
版中,PostgreSQL 引擎能够将一些特定类型的查询语句放到多个处理器
核心上并行执行 。支持并行执行的操作有:顺序扫描、部分 join 以及部
分聚合操作 。然而,增删改这些修改数据的操作无法实现并行 。支持并


推荐阅读