PostgreSQL 12 Beta 1 发布!

发布于 2019-05-23,作者为 PostgreSQL 全球开发小组
PostgreSQL 项目

PostgreSQL 全球开发小组宣布,PostgreSQL 12 的第一个 beta 版本现已可供下载。此版本包含 PostgreSQL 12 最终版本中将提供的所有功能的预览,尽管在最终版本之前,某些细节可能会发生变化。

秉承开源 PostgreSQL 社区的精神,我们强烈建议您在数据库系统中测试 PostgreSQL 12 的新功能,以帮助我们消除可能存在的任何错误或其他问题。虽然我们不建议您在生产环境中使用 PostgreSQL 12 Beta 1,但我们鼓励您找到方法针对此 beta 版本运行您的典型应用程序工作负载。

您的测试和反馈将帮助社区确保 PostgreSQL 12 版本符合我们提供世界上最先进的开源关系数据库的稳定、可靠版本的标准。

PostgreSQL 12 功能亮点

索引性能、功能和管理

PostgreSQL 12 改进了标准 B 树索引的整体性能,并改进了这些索引的空间管理。这些改进还减少了频繁修改的 B 树索引的索引大小,并提高了性能。

此外,PostgreSQL 12 添加了并发重建索引的能力,允许您执行 REINDEX 操作,而不会阻止对索引的任何写入。此功能应有助于解决在生产环境中管理 PostgreSQL 数据库时可能导致停机的长时间索引重建问题。

PostgreSQL 12 扩展了几个专用索引机制的能力。创建覆盖索引的能力,即 PostgreSQL 11 中引入的 INCLUDE 子句,现在已添加到 GiST 索引中。SP-GiST 索引现在支持对支持距离 (<->) 操作的数据类型执行 K 最近邻 (K-NN) 查询的能力。

在 PostgreSQL 12 中,创建 GiST、GIN 或 SP-GiST 索引时生成的预写日志 (WAL) 开销也显着减少,这为 PostgreSQL 集群的磁盘利用率和持续归档和流复制等功能带来了好处。

内联 WITH 查询(公共表表达式)

如果公共表表达式(又名 WITH 查询)a)不是递归的,b)没有任何副作用,并且 c)在查询的后续部分中只被引用一次,则现在可以自动将其内联到查询中。这消除了自 PostgreSQL 8.4 中引入 WITH 子句以来一直存在的“优化屏障”。

如果需要,您可以使用 MATERIALIZED 子句强制 WITH 查询实体化,例如:

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

分区

PostgreSQL 12 改进了在处理仅需要使用少量分区的数千个分区表时的性能。

PostgreSQL 12 还改进了 INSERTCOPY 到分区表的性能。现在可以在不阻止对分区表的并发查询的情况下执行 ATTACH PARTITION。此外,在 PostgreSQL 12 中允许使用外键引用分区表。

SQL/JSON 规范的 JSON 路径查询

PostgreSQL 12 现在允许根据 SQL:2016 标准执行 JSON 路径查询。类似于 XML 的 XPath 表达式,JSON 路径表达式允许您评估各种算术表达式和函数,以及比较 JSON 文档中的值。

可以使用 GIN 索引加速这些表达式的子集,从而允许对 JSON 数据集执行高性能查找。

排序规则

PostgreSQL 12 现在支持 ICU 提供的排序规则的不区分大小写和不区分重音的比较,也称为“非确定性排序规则”。使用时,这些排序规则可以为比较和排序提供便利,但也可能导致性能损失,因为排序规则可能需要对字符串进行额外的检查。

最常见值扩展统计信息

CREATE STATISTICS,在 PostgreSQL 10 中引入,用于收集多个列的更复杂统计信息以改进查询计划,现在支持最常见值统计信息。这可以改进非均匀分布的查询计划。

生成列

PostgreSQL 12 允许创建生成列,这些列使用其他列的内容通过表达式计算其值。此功能提供存储的生成列,这些列在插入和更新时计算,并保存在磁盘上。虚拟生成列(仅当在查询中读取列时才计算)尚未实现。

可插拔表存储接口

PostgreSQL 12 引入了可插拔表存储接口,该接口允许创建和使用不同的表存储方法。可以使用 CREATE ACCESS METHOD 命令将新的访问方法添加到 PostgreSQL 集群,然后使用 CREATE TABLE 上的新 USING 子句添加到表中。

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

在 PostgreSQL 12 中,默认使用的存储接口是 heap 访问方法,它目前是唯一的内置方法。

页面校验和

pg_verify_checkums 命令已重命名为 pg_checksums,现在支持在离线 PostgreSQL 集群中启用和禁用页面校验和。以前,只能在初始化带有 initdb 的集群期间启用页面校验和。

身份验证和连接安全性

GSSAPI 现在支持客户端和服务器端加密,并且可以在 pg_hba.conf 文件中使用 hostgssenchostnogssenc 记录类型指定。如果 PostgreSQL 是使用 OpenLDAP 编译的,则 PostgreSQL 12 还允许根据 DNS SRV 记录发现 LDAP 服务器。

值得注意的行为更改

PostgreSQL 12 中引入了一些可能会影响行为以及正在进行的运营管理更改。下面列出了一些更改;有关其他更改的信息,请查看发行说明的“迁移到版本 12”部分。

  1. recovery.conf 配置文件现在已合并到主 postgresql.conf 文件中。如果 PostgreSQL 检测到存在 recovery.conf,则不会启动。要将 PostgreSQL 置于非主模式,可以使用 recovery.signalstandby.signal 文件。

您可以在此处阅读有关归档恢复的更多信息

https://postgresql.ac.cn/docs/12/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY

  1. 默认情况下,现在启用即时 (JIT) 编译。

  2. 不再允许使用 WITH OIDs 子句将 OID 添加到用户创建的表中。需要调整对使用 WITH OIDS 创建的列(即名为“OID”的列)的表的操作。

在系统表上运行 SELECT * 命令现在还将输出系统表中行的 OID,而不是旧的行为,旧的行为需要显式指定 OID 列。

其他功能

PostgreSQL 12 中添加了许多其他新功能和改进,其中一些功能对于特定用户可能与上述功能一样重要甚至更重要。请参阅发行说明,以获取新的和更改的功能的完整列表。

测试错误和兼容性

每个 PostgreSQL 版本的稳定性在很大程度上取决于您,即社区,在 PostgreSQL 12 正式发布之前,使用您的工作负载和测试工具测试即将到来的版本,以便找到错误和回归。由于这是一个 Beta 版本,数据库行为、功能细节和 API 的细微更改仍然是可能的。您的反馈和测试将有助于确定新功能的最终调整,因此请在近期进行测试。用户测试的质量有助于确定何时可以进行最终版本发布。

PostgreSQL wiki 中公开提供了未解决的问题列表。您可以使用 PostgreSQL 网站上的此表格报告错误

https://postgresql.ac.cn/account/submitbug/

Beta 时间表

这是版本 12 的第一个 beta 版本。PostgreSQL 项目将根据需要发布其他 beta 版本以进行测试,然后发布一个或多个候选版本,直到 2019 年底的最终版本。有关更多信息,请参阅Beta 测试页面。

链接