
大数据 / 人工智能 / 区块链 / 数据库 / 分布式存储
PostgreSQL是世界上最先进的开源数据库,目前的最新版本是近期刚刚发布的PostgresSQL 13。今天,我们就来看看都有哪些新特性。

吴绩敏 | 文
© 中兴数据智能(ZTE-DI)出品

性能提升
在先前PostgreSQL版本的基础上,PostgreSQL 13可以有效地处理标准数据库索引即B-tree索引中的重复数据。这既降低了B-tree索引所需的总体使用空间,也提高了整体查询性能。
PostgreSQL 13还引入了增量排序,较早步骤的查询所产生的已排序数据可以加快后续步骤的排序。此外,PostgreSQL现在可以使用扩展的统计信息(通过CREATE STATISTICS访问)来创建增强的查询计划,可带有OR子句和列表中的IN/ANY查找。
在PostgreSQL 13中,具有大聚合的查询不需要完全放在内存中,更多类型的聚合和分组因此受益于PostgreSQL的高效哈希聚合功能。因为有更多情况可以裁剪分区或直接join分区,带有分区表的查询性能也得到了提高。

管理优化
清理(Vacuuming)是PostgreSQL管理的重要部分,它使数据库能够在更新和删除行之后回收存储空间。
尽管之前的PostgreSQL版本已经完成了减轻清理开销的工作,但是清理过程也可能带来管理上的挑战。PostgreSQL 13继续改进清理系统,引入了索引的并行清理,可以有效提升清理性能。此外,管理员可以针对特定工作负载调整此新功能的使用,可以选择要运行的并行Worker进程的数量。除了这些性能提升的好处,还可以在数据插入时触发自动清理过程。
复制槽(Replication slots)用于防止预写日志(WAL)在备库收到之前被删除。在PostgreSQL 13中可以调整复制槽,指定要保留的WAL文件的最大数量,并且避免磁盘空间不足的错误。
PostgreSQL 13还增加了更多管理员可以监视数据库活动的方式,包括从EXPLAIN查看WAL使用情况的统计信息,基于流的备份进度,以及ANALYZE命令的进度。另外,还可以使用新的pg_verifybackup命令来检查pg_basebackup命令输出的完整性。

应用开发更方便
PostgreSQL 13让使用来自不同数据源的PostgreSQL数据类型更加容易。新版本在SQL/JSON路径支持中添加了datetime()函数,该函数可将有效的时间格式(例如ISO 8601字符串)转换为PostgreSQL本地类型。此外,UUID v4 生成函数gen_random_uuid()现在可以直接使用而无需安装任何扩展。
PostgreSQL 13的分区系统更加灵活,分区表完全支持逻辑复制和BEFORE行级触发器。
PostgreSQL 13中的FETCH FIRST语法扩展为可包含WITH TIES子句。指定时,WITH TIES包括基于ORDER BY子句的结果集中最后一行相匹配的任何其他行。

安全增强
PostgreSQL的扩展系统是其强大功能的关键组成部分,它允许开发人员根据需要扩展其功能。在以前的版本中,新的扩展只能由数据库超级用户安装。为了更轻松地利用PostgreSQL的可扩展性,PostgreSQL 13添加了"可信扩展"的概念,允许数据库用户使用安装超级用户标记为"受信任"的扩展。某些内置扩展默认情况下标记为受信任,包括 pgcrypto, tablefunc, hstore等。
对于需要安全身份验证方法的应用程序,PostgreSQL 13允许客户端在使用SCRAM身份验证时要求通道绑定,并且PostgreSQL外部数据包装器(postgres_fdw)现在可以使用基于证书的身份验证。

迁移至PostgreSQL 13
要从以前的任何版本迁移数据到13版本,需要使用pg_dumpall或使用pg_upgrade或逻辑复制。
PostgreSQL 13包含大量可能影响与以前版本兼容性的更改,在使用时也需要多加注意。
* 本文为中兴数据智能原创文章,转载请留言或评论获取授权。
