2019-05-23,PostgreSQL全球开发组宣布PostgreSQL 12的第一个Beta版本正式提供下载。这个版本包含将来PostgreSQL 12正式版本中的所有特性和功能,当然一些功能的细节在正式版本发布时可能会有些变化。
按PostgreSQL开源社区的精神,我们鼓励大家在用户的场景下测试新功能,以帮助我们消除Bug或是其他可能存在的问题。当然我们不建议大家在生产环境使用PostgreSQL 12 Beta1版本,我们鼓励在用户特定的工作负载下测试这个版本。
用户的测试将帮助社区来确保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
查询的“优化限制栅栏”取消,以实现上述功能。如有必要,用户也可以使用以下方式,强制让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版本也改进了INSERT
和 COPY
操作分区表的性能。 ATTACH PARTITION
操作分区表,现在也可以不阻塞并发查询。另外,新版本中也允许使用外键来引用分区表。
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
配置文件中指定 hostgssenc
和hostnogssenc
的记录类型,GSSAPI现在支持客户端和服务端的加密。PostgreSQL 12版本现在如在编译时增加了OpenLDAP选项,通过内部的DNS SRV
的参数,也可以搜索LDAP服务器。
在新的PostgreSQL 12版本中引入了几处较大的变更,这些变更会影响用户的日常操作或是系统管理,主要变更见以下列表,其他详细的变更内容请参见发布文档中“迁移至12版本”章节内容: https://www.postgresql.org/docs/devel/release-12.html
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 即时编译现在是缺省启用的。
新版本中OID不会加入用户创建的表,即使用户创建表时使用了WITH
OIDs
选项。 因此以后用户使用上述选项创建表的操作需要变更了。
而在执行SELECT *
操作查询一个系统内部表时仍会输出OID字段,而以前的版本中是必须明确要求输出OID字段时才会显示这个字段。
许多其他的新特性和改进也加入了PostgreSQL 12,部分内容对一些特定的用户也许比上面提及的改进更重要。请参阅 发布声明详稿 来浏览完整的全部新特性或是改进功能列表。
每一个PostgreSQL版本的稳定性都依赖于社区中的广大用户,来使用自己的工作负载和测试工具来发现Bug及进行回归测试。由于这还是一个Beta版本,数据库操作的方式、新特性的细节以及API可能都还会有小的修改。用户的反馈和测试将帮助我们决定对新特性的最终优化,所以请在近期就进行测试。用户测试的质量将帮助我们决定何时可以发布最终版本。
目前仍待解决的问题在PostgreSQL的WIKI页面上有一个列表。用户可以通过 以下网址来报告Bug: https://www.postgresql.org/account/submitbug/
这是12版本的第一个Beta测试版本,PostgreSQL项目组还会根据测试情况发布更多测试版本,然后会发布一个或多个备选RC版本,准备在2019年底发布正式版本。更多信息请参考我们的测试信息页面:https://www.postgresql.org/developer/beta/