9.6 新特性

来自 PostgreSQL wiki
跳转到导航跳转到搜索

PostgreSQL 9.6 的新特性

此页面正在建设中,将包括 PostgreSQL 9.6 特性和变更的详细信息。感谢 Thom Brown 整理了最初的列表。

并行查询

并行顺序扫描

PostgreSQL 现在可以在多个并行进程中执行完整表扫描,最多可达用户设置的限制。

链接

并行连接

链接

并行聚合

并行聚合允许聚合函数由多个工作进程并发处理。这可以显着提高聚合大量元组到仅几个聚合组的查询的响应时间,前提是服务器有足够的空闲 CPU,否则将受限于后端进程运行的单个 CPU。每个工作进程在元组子集上操作,并创建一个部分聚合结果,它将返回到主后端进程,在那里每个部分结果将与来自其他工作进程的结果组合在一起,并生成最终的聚合结果。

大多数内部聚合函数支持并行模式。用户定义的聚合将需要更改以添加组合函数,并且在聚合函数返回 INTERNAL 状态的情况下,可能需要添加序列化和反序列化。

链接

postgres_fdw

排序下推

链接

连接下推

链接

DML (UPDATE/DELETE) 下推

链接

操作符和函数下推

链接

复制

新的 remote_apply 复制模式,该模式将等待确认备用服务器已应用更改

链接

支持多个同步备用服务器

链接

pg_stat_wal_receiver

链接

复制槽可在创建时分配 WAL

链接

文本搜索

短语全文搜索

链接

可编辑的 tsvector 字段

现在可以详细修改 tsvector 字段以微调可搜索性。

链接

事务、VACUUM 和可见性映射

用于检查可见性映射的 pg_visibility 扩展

链接

可见性映射中的冻结页面数据,用于跳过对已冻结数据的真空操作

链接

用户定义的快照过期时间,用于控制表膨胀

到目前为止,长时间运行的报告或游标显示查询结果可能会阻止清除死行,从而导致数据库中所有易失表膨胀。唯一的选择是允许膨胀、暂停对其他表的正常更新或终止长时间运行的活动 - 这可能与膨胀表完全无关。膨胀的累积会导致性能问题和存储空间过度使用。

一个名为 old_snapshot_threshold 的新配置选项允许集群配置为在更新或删除它的事务(导致它成为死行)完成且仍能看到它的所有快照都达到一定年龄时,允许清除死行,而不会立即终止使用此类快照的活动。例如,如果一个大型月度报告在 etl_monthly 表中运行(该表目前没有变化),则其他表的膨胀将受到限制,并且报告可以在不发生错误的情况下运行到完成。如果快照已超过阈值,并且查询使用该快照尝试从最近修改的页面读取数据(该页面可能不会产生准确的结果),则会抛出“快照太旧”错误。通常,在配置 old_snapshot_threshold 时,目标是将其设置为足够高以使此类错误很少出现,同时防止膨胀引起的问题。

链接

psql

\ev 和 \sv 命令用于编辑视图

链接

用于显示后端 PId 的提示变量

链接

多个 -c 和 -f 选项

psql 中的交叉表

\crosstabview 是一种完全不同的显示查询结果的方式:与垂直显示行不同,数据值放置在网格中,其中列和行标题来自数据本身,类似于电子表格。

SQL 命令

ALTER TABLE ADD COLUMN IF NOT EXISTS

链接

ALTER TABLE SET 及其锁

链接

COPY 和 DML 语句 (CTE)

链接


性能和监控

pg_stat_activity 中的详细等待信息

链接

针对部分索引的索引仅扫描

链接

外部排序操作的性能改进

链接

系统视图和管理

新的系统视图 pg_config


pg_blocking_pids

链接

函数 pg_get_* 在无效对象上返回 NULL

在 9.6 之前,这些函数很容易遇到“缓存查找”错误。

链接

pg_notification_queue_usage 用于查看通知队列

链接


备份

pg_basebackup 扩展了复制槽

链接


用于热物理备份的新 API

在 PostgreSQL 9.6 之前,执行并发物理备份的唯一方法是通过 pg_basebackup,通过流复制协议。低级文件系统复制仅在独占模式下可用,通过调用 pg_start_backup()、启动数据文件复制,然后最终调用 pg_stop_backup()。

一个接一个备份的限制已经被一个新的原生 API 克服,该 API 重定义了 pg_start_backup() 方法,并为 pg_stop_backup() 添加了一个变体。为了向后兼容,保留了较旧的签名。

新的 pg_start_backup 函数现在接受第三个可选参数,称为“exclusive”,该参数默认设置为“true”,以实现向后兼容性。启动并发(或者如果您愿意,非独占)备份非常简单

SELECT pg_start_backup('my_label', false, false);

如果您不熟悉 pg_start_backup(),第一个参数是备份的标签,第二个参数是请求快速检查点操作。第三个参数,当设置为 false 时,请求并发备份

postgres=# SELECT pg_start_backup('my_label', true, false);
-[ RECORD 1 ]---+----------
pg_start_backup | 0/F000028

请求并发备份的 PostgreSQL 连接需要在整个数据文件物理复制过程中保持活动状态(使用您最喜欢的工具,如 rsync、cp、tar、SAN 或 LVM 快照,...)。注意:此操作遵循与之前版本的 PostgreSQL 相同的程序(有关详细信息,请参阅有关连续归档和时间点恢复的文档)。

完成后,我们需要使用 pg_stop_backup() 的新版本来指定我们正在关闭当前的非独占备份

SELECT * FROM pg_stop_backup(false);

不同的签名有一个强制参数,称为“exclusive”,该参数需要设置为“false”才能进行并发备份。原因是该函数返回不同的结果,一个由三个字段组成的行

  1. LSN,用于备份一致性,在 pg_stop_backup() 时间返回:与之前版本相同
  2. 标签文件的内容:这需要保存在主备份目录中的“backup_label”中(9.6 中新增)
  3. 表空间列表:如果非空,这需要保存在主备份目录中的“tablespace_map”中(9.6 中新增)

例如

postgres=# SELECT * FROM pg_stop_backup(false);
NOTICE:  pg_stop_backup complete, all required WAL segments have been archived
-[ RECORD 1 ]-------------------------------------------------------------
lsn        | 0/F000130
labelfile  | START WAL LOCATION: 0/F000028 (file 00000001000000000000000F)+
           | CHECKPOINT LOCATION: 0/F000060                               +
           | BACKUP METHOD: streamed                                      +
           | BACKUP FROM: master                                          +
           | START TIME: 2016-05-16 09:19:44 CEST                         +
           | LABEL: my_label                                              +
           | 
spcmapfile | 16386 /Users/gabriele/pg96/tbs1                              +
           | 16388 /Users/gabriele/pg96/tbs2                              +
           | 

如您所见,这两个步骤要求用户更改其自定义备份脚本。但是,用户应该期望常见的灾难恢复和备份外部解决方案,例如 BarmanOmniPITRPgBackRestpghoardWAL-E 透明地管理 9.6 中引入的这种新行为。

此新的内核 API 替换了 pgespresso 包,该包之前与 Barman 1.3.1 及更高版本一起使用。Barman 2.0 现在支持 PG9.2-PG9.5 的 pgespresso 和新的 9.6 API。

重要:此新 API 将成为未来协调低级备份操作与 PostgreSQL 的唯一支持方式。

链接


扩展和 Contrib 模块

扩展级联支持以安装依赖项

链接

Cube 扩展 kNN 支持

链接


其他功能

命令进度报告

链接



通用 WAL 工具

链接


以度为单位的三角函数