翻译:doudou586 ... 新闻稿采编:2019-05-25 20:25:23+08

软件发布:2019-05-23

2019-05-23,PostgreSQL全球开发组宣布PostgreSQL 12的第一个Beta版本正式提供下载。这个版本包含将来PostgreSQL 12正式版本中的所有特性和功能,当然一些功能的细节在正式版本发布时可能会有些变化。

按PostgreSQL开源社区的精神,我们鼓励大家在用户的场景下测试新功能,以帮助我们消除Bug或是其他可能存在的问题。当然我们不建议大家在生产环境使用PostgreSQL 12 Beta1版本,我们鼓励在用户特定的工作负载下测试这个版本。

用户的测试将帮助社区来确保PostgreSQL 12版本保持我们一贯以来的标准,即提供稳定、可靠的世界上功能最为强大的开源的关系数据库系统。

POSTGRESQL 12版本主要特性

索引性能、函数和管理

PostgreSQL 12提升了标准B树索引的总体性能,同时也改进了这些索引的存储空间管理,这些改进不仅减小了这一类经常被更新的索引的大小,也提升了系统的总体性能。

另外,PostgreSQL 12版本增加了并发重建索引的功能,这样可以在不影响新的索引写入的前提下让用户执行REINDEX操作。新功能有助于用户在管理生产环境的服务器时,可以实现不停机对较大索引的重建。

PostgreSQL 12 版本也扩展了几种特定的索引机制。例如,自PostgreSQL 11版本引入的INCLUDE选项创建的包含索引,现在也扩展至GiST索引。SP-GiST索引现在支持对数据类型中含有<->距离操作的K-NN(即相邻最近)查询。

现在生成GiST、GIN或SP-GiST索引的WAL日志的负载也显著减少了,这对PostgreSQL服务器的磁盘利用和类似连续归档以及流复制都有很多的好处。

内置 WITH 查询 (公共表达式功能)

公共表达式 (也称之为WITH查询)在新版本中只需满足以下条件,就可以自动内置在一个查询中了:

  1. 不是递归查询;
  2. 没有任何副作用;
  3. 在后续的查询中只引用一次; 上述条件都符合后,系统就可以将自PostgreSQL 8.4版本以来对WITH查询的“优化限制栅栏”取消,以实现上述功能。

如有必要,用户也可以使用以下方式,强制让WITH 查询物化保存,使用 MATERIALIZED 选项,例如:

    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 操作分区表,现在也可以不阻塞并发查询。另外,新版本中也允许使用外键来引用分区表。

符合SQL/JSON 规范的JSON路径查询

PostgreSQL 12 版本现在允许符合SQL:2016标准的SQL/JSON规范来执行JSON路径查询 。与XML标准中的XPath表达式类似,JSON路径表达式不仅比较JSON列的值,还可以评估算术表达式和函数的各种组合结果。

通过使用GIN索引,可以加速这些表达式的子集的查询,以实现跨多组JSON数据集的高性能查询。

排序

PostgreSQL 12现在支持按ICU提供的排序规则,即支持大小写不敏感或是重音不敏感的排序方法,也称为“非确定性排序” 。在使用时,这些排序方法可以对比较和排序提供方便,但因需对字符串进行额外检查,也会有一点性能上的损失。

最常用值的扩展统计信息

CREATE STATISTICS指令在PostgreSQL 10版本引入系统,来帮助收集多列中的更复杂的统计信息,以提升查询规划。新版本中现在支持最常用值的统计信息,这样可以提升非均匀性分布负载的查询规划。

计算列

PostgreSQL 12允许创建根据其他列的值通过一个表达式来生成指定列的功能。该特性现在提供保存计算列的功能,并且是在插入或是更新记录时,系统进行计算,然后保存至磁盘。而虚拟计算列功能,即在查询时进行计算,目前还没有实现。

可插拨的表存取接口

PostgreSQL 12版本中引入了可插拨的表存取接口,来允许表的取在创建和使用时使用不同的存取方式。

新的存取方式可以通过CREATE ACCESS METHOD 指令加入系统,此后在CREATE TABLE创建表时使用USING选项即可生效,详见: https://www.postgresql.org/docs/devel/table class="table table-bordered table-condensed"am.html

在PostgreSQL 12版本中,缺省使用的存取接口是heap存取方式,目前也是唯一的内置方式。

页面的校验

pg_verify_checkums 指令已更名为pg_checksums ,现在支持对停机的PostgreSQL服务器开启或是停用页校验。而以前版本中该操作仅允许在 initdb的阶段来执行。

认证和连接安全性

通过在pg_hba.conf配置文件中指定 hostgssenchostnogssenc的记录类型,GSSAPI现在支持客户端和服务端的加密。PostgreSQL 12版本现在如在编译时增加了OpenLDAP选项,通过内部的DNS SRV的参数,也可以搜索LDAP服务器。

系统较大的变更点

在新的PostgreSQL 12版本中引入了几处较大的变更,这些变更会影响用户的日常操作或是系统管理,主要变更见以下列表,其他详细的变更内容请参见发布文档中“迁移至12版本”章节内容: https://www.postgresql.org/docs/devel/release-12.html

  1. recovery.conf 配置文件现在合并至postgresql.conf 文件中了。 PostgreSQL如在启动时检测到recovery.conf文件存在时,将不会启动。在将PostgreSQL设置为非宿主模式时,用户可以使用recovery.signalstandby.signal 文件。 用户也可以浏览以下页面来了解更多有关备份恢复的操作: https://www.postgresql.org/docs/devel/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY

  2. JIT 即时编译现在是缺省启用的。

  3. 新版本中OID不会加入用户创建的表,即使用户创建表时使用了WITH OIDs 选项。 因此以后用户使用上述选项创建表的操作需要变更了。 而在执行SELECT *操作查询一个系统内部表时仍会输出OID字段,而以前的版本中是必须明确要求输出OID字段时才会显示这个字段。

其他的特性功能

许多其他的新特性和改进也加入了PostgreSQL 12,部分内容对一些特定的用户也许比上面提及的改进更重要。请参阅 发布声明详稿 来浏览完整的全部新特性或是改进功能列表。

Bug和兼容性的测试

每一个PostgreSQL版本的稳定性都依赖于社区中的广大用户,来使用自己的工作负载和测试工具来发现Bug及进行回归测试。由于这还是一个Beta版本,数据库操作的方式、新特性的细节以及API可能都还会有小的修改。用户的反馈和测试将帮助我们决定对新特性的最终优化,所以请在近期就进行测试。用户测试的质量将帮助我们决定何时可以发布最终版本。

目前仍待解决的问题在PostgreSQL的WIKI页面上有一个列表。用户可以通过 以下网址来报告Bug: https://www.postgresql.org/account/submitbug/

BETA发布安排

这是12版本的第一个Beta测试版本,PostgreSQL项目组还会根据测试情况发布更多测试版本,然后会发布一个或多个备选RC版本,准备在2019年底发布正式版本。更多信息请参考我们的测试信息页面:https://www.postgresql.org/developer/beta/

相关链接

© 2010 PostgreSQL中文社区