由PostgreSQL全球开发组发布于2019-05-23
PostgreSQL全球开发组宣布PostgreSQL 12的第一个测试版现在可供下载。此版本包含PostgreSQL 12最终版本中可用的所有功能的预览,但此版本的某些细节可能会在最终发布之前发生变化。
本着开源PostgreSQL社区的精神,我们强烈建议您在数据库系统中测试PostgreSQL 12的新功能,以帮助我们消除可能存在的任何错误或其他问题。我们不建议您在生产环境中运行PostgreSQL 12 Beta 1,但我们建议您找到针对此测试版运行典型应用程序工作负载的方法。
您的测试和反馈将帮助社区确保PostgreSQL 12版本能够遵循我们一贯坚持的提供稳定可靠的世界上最先进的开源关系数据库版本的标准。
PostgreSQL 12功能亮点
索引性能,功能和管理
PostgreSQL 12改进了标准B树索引的整体性能,同时改进了这些索引的空间管理。除了性能提升之外,这些改进还减少了经常需要修改的B树索引的索引空间占用。
此外,PostgreSQL 12还增加了在线重建索引的功能,这使您可以在执行REINDEX
操作时不会堵塞对索引的任何写入操作。此功能应该有助于消除生产环境PostgreSQL数据库管理中大索引重建引入的停机影响。
PostgreSQL 12对几种专用索引的功能进行了扩展。创建覆盖索引的能力,即INCLUDE
PostgreSQL 11中引入的子句,现已添加到GiST索引中。SP-GiST索引现在支持对支持distance(<->
)操作的数据类型执行K近邻(K-NN)查询的能力。
创建GiST,GIN或SP-GiST索引时生成的预写日志(WAL)数量在PostgreSQL 12中也显著降低,这有助于改善PostgreSQL集群的磁盘利用率,同时也让持续存档(continous archiving)和流复制(stream replication)等功能受益。
内联WITH查询(公用表表达式,CTE)
公共表表达式(亦称为WITH
查询)现在可以在查询中自动内联,如果它们:a)不是递归的,b)没有任何不良影响,c)仅在查询的后续部分引用一次。自PostgreSQL 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;
分区
在PostgreSQL 12中,当对具有数千个分区的表操作时,如果操作只需要使用少量分区,性能会得到明显改善。
PostgreSQL 12对分区表的INSERT
和 COPY
操作也进行了性能提升。 ATTACH PARTITION
现在可以在不阻塞分区表并发查询的情况下执行。此外,PostgreSQL 12现在允许外键引用分区表。
基于SQL / JSON规范的JSON路径查询
PostgreSQL 12现在允许 根据SQL:2016标准中的SQL / JSON规范执行JSON路径查询。与XML的XPath表达式类似,除了比较JSON文档中的值之外,JSON路径表达式还允许您评估各种算术表达式和函数。
可以使用GIN索引加速这些表达式的子集,从而可以对多组JSON数据进行高效查找。
排序规则
PostgreSQL 12现在支持对ICU提供的排序规则进行不区分大小写和重音不敏感的比较,也称为“ 非确定性排序规则 ”。实际使用时,因为排序规则可能需要对字符串进行额外检查,所以在为比较和排序提供帮助的同时,也可能会带来一些性能损失。
最通用值(Most-common Value)的扩展统计
PostgreSQL 10中引入CREATE STATISTICS
,可以收集多列上更复杂的统计信息以改进查询规划。PostgreSQL 12现在支持最通用值统计,对于非均匀分布会改进查询规划。
Generated Columns
PostgreSQL 12允许创建generated columns ,在其他列的内容基础上使用表达式计算列值。此功能提供持久化的generated columns,这些列的值在表数据插入和更新时计算生成并持久化保存在磁盘上。对于在一个查询中实时计算并作为列读取的虚拟generated columns,目前尚未实现。
可插拔表存储接口(Pluggable Table Storage Interface)
PostgreSQL 12引入了可插拔表存储接口,允许表的创建和使用采用不同的表存储。可以使用CREATE ACCESS METHOD
命令将新的访问方法添加到PostgreSQL集群 ,然后将其添加到使用新USING
子句的 CREATE TABLE
创建的表上。
可以通过创建新的表访问方法来定义表存储接口。
在PostgreSQL 12中,默认使用的存储接口是heap
访问方法,它是目前唯一的内置方法。
页面校验(Page Checksums)增强
pg_verify_checkums
命令已重命名为pg_checksums
,现在支持在脱机的PostgreSQL群集中启用和禁用页面校验功能。以前,只能在群集使用initdb
初始化期间启用页面校验。
身份验证和连接安全
GSSAPI现在支持客户端和服务器端加密,可以pg_hba.conf
使用hostgssenc
和hostnogssenc
记录类型在文件中指定。如果编译时启用了OpenLDAP,PostgreSQL 12还允许基于DNS SRV
记录发现LDAP服务器。
值得关注的变化
PostgreSQL 12中引入了一些可能影响现有运行的行为和管理更改。其中一些如下所述; 有关其他更改的信息,请查看发行说明的“迁移到版本12”部分。
- 现在的
recovery.conf
配置文件被合并到主postgresql.conf
文件中。如果PostgreSQL检测到recovery.conf
存在,它将无法启动 。如果要将PostgreSQL置于非主模式,可以使用recovery.signal
和standby.signal
文件。
可以在此处详细了解存档恢复:
https://www.postgresql.org/docs/devel/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY
-
即时(JIT)编译现在默认启用。
-
使用
WITH OIDs
子句不能再将OID添加到用户创建的表中。因此对具有使用WITH OIDS
(例如名为“OID”的列)创建列的表操作将需要进行调整。
现在对于系统表执行的SELECT *
命令也会输出系统表中行OID,在以前版本中,则需要显式指定OID列。
附加功能
PostgreSQL 12中增加了许多其他新功能和改进,其中一些对于特定用户可能比上面提到的更为重要。有关新功能和更改功能的完整列表,请参阅发行说明。
测试错误和兼容性
每个PostgreSQL版本的稳定性在很大程度上取决于您、社区,使用您的工作负载和测试工具测试即将推出的版本,以便在PostgreSQL 12的GA之前找到缺陷和回归错误。由于这是Beta版本,对数据库的行为,功能细节和API进行微调仍然是可能的。您的反馈和测试将有助于确定新功能的最终调整,因此请尽快开展测试。用户测试的质量有助于确定何时可以进行最终发布。
PostgreSQL wiki中公开了一系列未解决的问题。您可以 在PostgreSQL网站上使用此表单报告错误:
https://www.postgresql.org/account/submitbug/
Beta计划
这是版本12的第一个测试版.PostgreSQL项目将根据测试需要发布额外的测试版,然后是一个或多个发布候选版,直到2019年末的最终版本。有关详细信息,请参阅Beta测试页面。
网友评论