PostgreSQL12、13新特性

PostgreSQL13新特性:

PostgreSQL 全球开发组于 2020-05-21 宣布了 PostgreSQL 13 的第一个 beta 版本,目前已经提供了下载。虽然细节可能会有所改变,但是该版本包含了 PostgreSQL 13 最终正式版中的所有新特性的预览,让我们赶紧一睹为快吧!

功能性

PostgreSQL 13 增加了许多改进性能的新特性,同时使得应用程序的开发更加容易。

  • 改进了 B 树索引中重复数据的处理,减少了索引的大小并且提高了查找速度,尤其是当索引中包含重复值的时候。
  • 增加了增量排序功能,可以加速基于已经排序的中间结果集的排序操作。
  • 包含 OR 子句或者 IN/ANY 常量列表的查询可以利用扩展统计(通过 CREATE STATISTICS 语句创建)可以获得更好的执行计划和性能。
  • 可以使用磁盘实现大型数据集的哈希聚合(作为聚合查询的一部分)。
  • 分区功能的持续改进,包括更多场景下的分区表直接连接查询,从而提高总体的查询性能。
  • 分区表支持 BEFORE 行级触发器,并且支持分区表的整体逻辑复制,不需要单独发布和订阅每个分区。
  • 实现了更多的 SQL 查询功能,例如 FETCH FIRST WITH TIES,可以返回更多满足条件的数据。
  • 为 jsonpath 查询增加了 .datetime() 函数,自动将日期或者时间字符串转换为合适的 PostgreSQL 日期/时间数据类型。
  • 更加方便的随机 UUID,内置函数 gen_random_uuid() 不再需要安装额外的扩展插件。

管理性

  • VACUUM 命令支持索引的并行处理,这也是 PostgreSQL 13 最令人期待的特性之一。通过 VACUUM 命令的新选项 PARALLEL 或者 vacuumdb --parallel 可以指定清理索引时的并发工作进程。注意,该选项不兼容 FULL 选项。
  • reindexdb 命令增加了 --jobs 选项,用于指定重新索引时的并发线程数量。
  • 引入了“可信插件”的概念,允许 superuser 指定某个插件可以被用户安装到自己的数据库中,只要他们拥有 CREATE 权限即可;
  • 支持更多的数据库监控方式:允许追踪 WAL 使用统计、流复制基础备份的进度以及 ANALYZE 命令的执行进度。pg_basebackup 可以生成一个描述清单,用于验证备份的完整性(通过一个新的工具 pg_verifybackup)。允许限制为复制槽(replication slots)保留的 WAL 空间。
  • pg_dump 支持新的选项,--include-foreign-data,用于导出 FDW 外部服务器中的数据。
  • pg_rewind 命令的增强。除了自动故障恢复之外,pg_rewind 也可以通过 --write-recovery-conf 选项配置 PostgreSQL 备用实例。另外,pg_rewind 还可以使用目标实例的 restore_command 获取所需的预写日志。

安全性

PostgreSQL 继续改进了安全相关的功能,引入了 PostgreSQL 安全部署相关的特性:

  • psql 和许多 PostgreSQL 连接驱动所使用的 libpq 连接库引入了几个新的安全参数。增加了 channel_binding 连接参数,允许客户端使用 SCRAM 的通道绑定功能。另外,客户端还可以使用 sslpassword 参数指定密码,通过密码保护的 TLS 进行认证。PostgreSQL 13 还增加了 DER 加密认证。
  • PostgreSQL 外部数据封装器(postgres_fdw)增强了安全连接功能,包括使用基于认证的授权连接到其他 PostgreSQL 服务器。另外, 非特权用户可以通过 postgres_fdw 不提供密码连接到其他 PostgreSQL 数据库。

其他增强

  • PostgreSQL 13 改进了 Windows 系统上的操作系,运行 PostgreSQL 的 Window 用户可以使用 UNIX 域套接字进行连接。
  • PostgreSQL 13 文档增加了术语汇编(glossary),可以帮助用户熟悉 PostgreSQL 和通用的数据库概念。与此同时,表格中的函数和运算符展示也进行了重大的重新编排,改进了网页和 PDF 文档的可读性。
  • 用于性能测试的 pgbench 工具可以支持 accounts 表的分区,使得包含分区表的性能测试更加简单。
  • psql 支持 \warn 命令,功能类似于输出数据的 \echo 命令,区别在于 \warn 的结果打印到 stderr。另外,--help 选项包含了一个指向 https://www.postgresql.org 的链接

 

PostgreSQL12 新特性:

1. PG 12.1 Beta发布了!


PostgreSQL全球开发组宣布,PostgreSQL 12的第一个测试版(PG 12.1 Beta)现已开放下载。该版本中可预览的所有特性都将延续至PG 12的最终版本中,不过在最终版本发布之前,一些细节仍可能发生变动。

本着PG社区的开源精神,我们强烈呼吁大家在自己的数据库系统中测试PG 12的新特性,从而帮助我们更多地消除可能存在的任何bug以及问题。当然,我们并不是建议您在自己的生产环境中应用PG 12.1 Beta,而是希望您寻找一种可以利用您现有的经典应用对该版本进行测试的一种方法。

PG 12秉承了我们的一直以来为世界最先进的开源关系型数据库提供稳定可靠版本的标准。因此为了帮助我们确保这一点,我们非常需要您积极的测试及反馈。

 

2. PG 12特性概览


2.1 索引的性能、功能性以及管理

PG 12通过改善索引的空间管理,进而提升了标准B树索引的总体性能。除了性能上的提升,这些改进也提供了对频繁修改的索引所占用空间的缩减。

此外,PG 12增加了在线重建索引的功能,该功能可以让您的REINDEX操作不再阻塞任何对索引的写入。当您在生产环境中管理PG数据库时,该功能可以有效解决由于漫长地重建索引而导致的迫不得已的业务中断。

PG 12对一些特定的索引机制的功能进行了扩展。例如在PG 11中引入的用于创建覆盖索引(covering index)的include子句,在PG 12中将同样适用于创建GiST索引。SP-GiST索引现在支持对支持距离(<->)操作的数据类型使用k近邻法(K-nearest neighbor K-NN)查询。

在PG 12中,创建一个GiST、GIN或是 SP-GiST索引所产生的日志先行(write-ahead log --WAL)的消耗将大大减少。这也为PG集群对磁盘的利用,以及一些像连续归档(continuous archiving)、流复制(streaming replication)这样的功能,提供了诸多益处。

2.2 内嵌WITH查询(Common table expressions)

公用表表达式(Common table expressions),亦被称为WITH查询,现在可以自动内嵌到一个查询语句中。但这些WITH查询须符合如下条件:

  • 不是递归的

  • 没有任何副作用

  • 在整条sql语句的后续部分中只会被引用一次

这将移除从PG 8.4引入WITH子句时就已存在的"optimization fence"。

如果有需要,可以使用MATERIALIZED子句来强制使一个WITH查询物化。如下:

WITH c AS MATERIALIZED ( SELECT * FROM a WHERE a.x % 4 = 0 ) SELECT * FROM c JOIN d ON d.y = a.x;

2.3 分区

对拥有上千个分区的表中检索一小部分分区的操作的处理,PG 12进行了性能上的优化。

PG 12也对分区表进行INSERT以及COPY操作时的性能进行了改善。PG 12中执行ATTACH PARTITION操作将不再阻塞对分区表并发查询。此外,PG 12中将允许创建关联到分区表的外键。

2.4 JSON path queries per SQL/JSON specification

PG12现在支持SQL:2016标准中的每一个SQL/JSON规范的JSON path查询。就像查询XML使用的Xpath一样,JSON path表达式可以让您除了对json文档中的值进行比较以外,还可以让您计算多种多样的算术表达式和函数。

这些表达式中的一部分还可以使用GIN索引来提高计算效率,从而高效的对JSON数据集进行检索。

2.5 校对

PG 12现在支持对ICU提供的排序规则进行不区分大小写(case-insensitive)、不区分口音(accent-insensitive)的比较,亦被称为非确定性校对(nondeterministic collations)。

当该特性被使用时,这些collation可以为排序和比较提供便利,但同时可能会因为对字符串额外的检查,而导致额外的性能损失。

2.6 Most-common Value Extended Statistics

在PG 10中引入的CREATE STATISTICS,是为了在多列上收集更复杂的统计信息,从而帮助产生更准确的执行计划。在PG 12中,收集统计信息支持most-common value statistics。这将进一步提升当数据分布不均匀时产生的执行计划的准群性。

2.7 被生成的列(Generated Columns)

PG 12允许创建生成列(就是Oracle的虚拟列)。这是一种列值是由其他列的值计算得出的列。该特性允许创建可存储的(stored)生成列,即在insert或update时计算出生成列的列值并存储于物理磁盘上。虚拟的(Virtual)生成列,是只有在其作为查询的一部分时才生成,目前该功能尚未实现。

 

注:生成列分为俩种stored和virtual,stored类型是写入是计算的得到,而virtual类型是只有读时才计算。

2.8 可插拔的表存储接口(Pluggable Table Storage Interface)

PG 12引入可插拔表存储接口(pluggable table storage interface),允许创建和使用不同的表存储方法。新的访问方法可以通过使用CREATE ACCESS METHOD的指令被添加到PG集群中,并且随后可以使用CREATE TABLE的新子句—USING,将新的访问方法添加的具体的表中。

一个表存储接口可以通过创建一个新的表访问方法来定义。

在PG 12中默认使用的存储接口是堆访问方法(heap access method),该方法是目前唯一的内置方法。

2.9 块校验和(Page Checksums)

pg_verify_checkums这条指令现在更名为pg_checksums,并且可以在一个离线的PG集群中进行启用和禁用。在之前的版本,该功能只能在使用initdb对集群初始化时启用。

2.10 身份认证以及连接安全(Authentication & Connection Security)

GSSAPI现在支持客户端和服务器端加密,该功能可以在pg_hba.conf 中使用hostgssenc和hostnogssenc这俩中记录类型进行指定。

如果PG 12是使用OpenLDAP进行编译的,那么PG 12还可以发现基于DNS SRV记录的LDAP servers。

 

3. 行为变更注意事项


PG 12中引入一些改变,这将对您惯用的管理时进行的操作和行为有一定影响。下面会列举这些变化中的一小部分,更多的其他改变的相关信息,可以从Release Notes的"Migrating to Version 12"部分中获取(https://www.postgresql.org/docs/devel/release-12.html)

1. recovery.conf这个参数文件现在已经合并到postgresql.conf文件中了。如果PG检测到有recovery.conf的存在,PG将不会成功启动。如果想让PG处于非主(non-primary)模式,您可以使用recovery.signal和standby.signal这两个文件。

您可以通过下面的连接获得更多的归档恢复(archive recovery)的信息:https://www.postgresql.org/docs/devel/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY

1. Just-in-Time (JIT)编译现在时默认开启的。

2. PG 12将不再允许使用WITH OIDs子句将OIDs添加到用户创建的表中。对于已经存在的使用WITH OIDs子句创建的表(例如列名是OID)的操作需要及时进行调整。

3. PG12中查询系统表时运行select *的指令,也会输出系统表的行的OID,而不再需要像之前的版本进行显示的指定OID列。

 

4. 其他特性


许多其他的新特性和改进已经被添加到PG 12中,其中一些特性和改变对于特定的用户来说,可能比上面提到的特性还重要。所以完整的新特性和新改进的请您查看Release Notes:https://www.postgresql.org/docs/devel/release-12.html。

 

5. BUG和兼容性的测试


每一个PG版本的稳定性,都非常依赖于您和您的团队使用您们的工作负载和测试工具对即将到来的版本进行不断的测试,从而帮助我们在PG 12公共版本发布之前找出更多的BUG和功能退步的地方。

由于这是一个测试版本,所以可能存在对于数据库行为、一些特性的细节以及各种接口(APIs)的一些细小的改变。您的反馈和测试将帮助我们最终确定该对新特性进行怎样的微调,所以恳请您尽快将其投入测试。用户测试的质量将帮助我们确定最终版本该合适发布。

一系列开放性问题已在PostgreSQL wiki对您公开。您可以使用如下的格式将bug在PG官网上告知我们:https://www.postgresql.org/account/submitbug/

 

6. 测试版本发布计划


这是PG 12的第一个测试版本,2019年年底发布最终版本之前,我们PG项目组将陆续根据测试需求发布更多的测试版本。

更进一步的详情请到如下网址了解:https://www.postgresql.org/developer/beta/

转自:

http://blog.itpub.net/31556440/viewspace-2646390/

https://blog.csdn.net/horses/article/details/106251459

你可能感兴趣的:(postgres)