PostgreSQL 全球开发组宣布,PostgreSQL 12 的首个 Beta 版本现已可供下载。此版本包含 PostgreSQL 12 最终版本中所有功能的预览,尽管在最终发布之前,其中一些细节可能会发生变化。
本着开源 PostgreSQL 社区的精神,我们强烈鼓励您在自己的数据库系统中测试 PostgreSQL 12 的新功能,以帮助我们消除可能存在的任何 bug 或其他问题。虽然我们不建议您在生产环境中使用 PostgreSQL 12 Beta 1,但我们鼓励您尝试用此 Beta 版本运行您典型的应用程序工作负载。
您的测试和反馈将有助于社区确保 PostgreSQL 12 版本能够保持我们提供稳定、可靠的世界领先开源关系型数据库的标准。
PostgreSQL 12 通过改进标准 B-tree 索引的空间管理,提高了其整体性能。这些改进还降低了频繁修改的 B-tree 索引的大小,并提高了性能。
此外,PostgreSQL 12 增加了并发重建索引的能力,这允许您在不阻塞对索引的任何写入操作的情况下执行 REINDEX
操作。这项功能应有助于处理耗时的索引重建,在生产环境中管理 PostgreSQL 数据库时,这些重建操作可能会导致停机。
PostgreSQL 12 扩展了多种专用索引机制的能力。在 PostgreSQL 11 中引入的包含索引(即 INCLUDE
子句)现在已添加到 GiST 索引中。SP-GiST 索引现在支持对支持距离 (<->
) 操作的数据类型执行 K-近邻 (K-NN) 查询。
在 PostgreSQL 12 中,创建 GiST、GIN 或 SP-GiST 索引时产生的预写日志 (WAL) 开销也大大减少,这为 PostgreSQL 集群的磁盘利用率以及连续归档和流复制等功能带来了多项好处。
公用表表达式(也称为 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 还提高了 INSERT
和 COPY
到分区表的性能。现在,可以在不阻塞对分区表的并发查询的情况下执行 ATTACH PARTITION
。此外,PostgreSQL 12 现在允许使用外键引用分区表。
PostgreSQL 12 现在允许按照 SQL:2016 标准中的 SQL/JSON 规范执行 JSON 路径查询。与 XML 的 XPath 表达式类似,JSON 路径表达式允许您在 JSON 文档中评估各种算术表达式和函数,并进行值比较。
可以使用 GIN 索引加速这些表达式的一个子集,从而可以对 JSON 数据集进行高性能查找。
PostgreSQL 12 现在支持 ICU 提供的排序规则的忽略大小写和忽略音调符号的比较,也称为“非确定性排序规则”。使用这些排序规则可以方便比较和排序,但有时也可能导致性能下降,因为排序规则可能需要对字符串进行额外的检查。
在 PostgreSQL 10 中引入的 CREATE STATISTICS
用于收集更复杂的跨多个列的统计信息以改进查询规划,现在支持最常见值统计信息。这可以改善非均匀分布的查询计划。
PostgreSQL 12 允许创建 生成列,这些列使用其他列的内容通过表达式计算其值。此功能提供了存储的生成列,它们在插入和更新时计算并保存在磁盘上。虚拟生成列(仅在查询读取列时计算)尚未实现。
PostgreSQL 12 引入了可插拔表存储接口,允许创建和使用不同的表存储方法。可以使用 CREATE ACCESS METHOD
命令将新的访问方法添加到 PostgreSQL 集群,然后使用 CREATE TABLE
上的新 USING
子句将其添加到表中。
可以通过创建新的 表访问方法 来定义表存储接口。
在 PostgreSQL 12 中,默认使用的存储接口是 heap
访问方法,该方法目前是唯一内置的方法。
pg_verify_checkums
命令已重命名为 pg_checksums
,现在支持在离线的 PostgreSQL 集群中启用和禁用页面校验和。以前,页面校验和只能在集群初始化时使用 initdb
启用。
GSSAPI 现在支持客户端和服务器端加密,并可以使用 hostgssenc
和 hostnogssenc
记录类型在 pg_hba.conf
文件中指定。如果 PostgreSQL 使用 OpenLDAP 编译,PostgreSQL 12 还允许基于 DNS SRV
记录发现 LDAP 服务器。
PostgreSQL 12 引入了多项变更,可能会影响您当前操作的行为以及管理方式。以下列出了一些变更;有关其他变更的信息,请查阅 发布说明 中“迁移到版本 12”部分。
recovery.conf
配置文件现已合并到主要的 postgresql.conf
文件中。如果检测到 recovery.conf
存在,PostgreSQL 将无法启动。要将 PostgreSQL 置于非主模式,您可以使用 recovery.signal
和 standby.signal
文件。您可以在此处阅读有关 归档恢复 的更多信息。
https://postgresql.ac.cn/docs/12/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY
即时(JIT)编译现已默认启用。
不再允许使用 WITH OIDS
子句将 OID 添加到用户创建的表中。使用 WITH OIDS
创建的表的列(即名为“OID”的列)上的操作需要进行调整。
在系统表上运行 SELECT *
命令现在还将输出系统表中行的 OID,而不是旧行为(需要显式指定 OID 列)。
PostgreSQL 12 中还添加了许多其他新功能和改进,其中一些功能可能对特定用户来说与上述功能同等重要甚至更重要。请参阅 发布说明 以获取新功能和已更改功能的完整列表。
每个 PostgreSQL 版本的稳定性在很大程度上取决于您——社区——在 PostgreSQL 12 正式发布之前,通过您的工作负载和测试工具测试即将发布的版本,以发现 bug 和回归。由于这是 Beta 版本,数据库行为、功能细节和 API 仍可能发生微小变化。您的反馈和测试将有助于确定新功能的最终调整,因此请在不久的将来进行测试。用户测试的质量有助于我们确定何时可以进行最终发布。
PostgreSQL wiki 上公开提供了一个 未解决问题列表。您可以使用 PostgreSQL 网站上的此表单 报告 bug。
https://postgresql.ac.cn/account/submitbug/
这是 12 版的第一个 Beta 版本。PostgreSQL 项目将根据测试需要发布其他 Beta 版本,然后发布一个或多个候选版本,直到 2019 年底最终发布。有关更多信息,请参阅 Beta 测试 页面。