发布 PostgreSQL 15:提升排序性能,新增 MERGE 命令

发表时间: 2022-10-14 11:08

出品|开源中国

PostgreSQL 15 已发布,此版本在本地管理和分布式部署中的工作负载方面有明显的优化,包括改进的排序性能。此版本还添加了流行的 MERGE 命令、启用 Zstd 和 LZ4 压缩支持,以及更多用于观察 / 调整数据库状态的功能。

改进的排序性能和压缩

  • 最新版本中,PostgreSQL 改进了其内存和磁盘上的排序算法。测试基准显示:根据不同的数据类型,此次排序优化大概可加速 25% - 400%。

  • 在 PostgreSQL 15 中,使用 row_number ()、rank ()、dense_rank () 和 count () as 窗口函数也具有性能优势。

  • 使用 SELECT DISTINCT 的查询可以并行执行。

  • PostgreSQL 15 添加了对 LZ4 和 Zstandard (zstd) 压缩到预写日志 (WAL) 文件的支持,对于某些工作负载可以同时具有空间和性能优势。

  • 在某些操作系统上,PostgreSQL 15 增加了对 WAL 中引用的预取页面的支持。

  • PostgreSQL 的内置备份命令 pg_basebackup 现在支持备份文件的服务器端压缩,可选择 gzip、LZ4 和 zstd 等压缩方法。

  • PostgreSQL 15 拥有使用自定义模块进行归档的能力,消除了使用 shell 命令的开销。

新的开发者功能

  • PostgreSQL 15 包含 SQL 标准 MERGE 命令。MERGE 允许编写条件 SQL 语句,这些语句可以在单个语句中包含 INSERT、UPDATE 和 DELETE 操作。

  • PostgreSQL 15 还增加了使用正则表达式检查字符串的新函数:regexp_count ()、regexp_instr ()、regexp_like () 和 regexp_substr ()。

  • PostgreSQL 15 还扩展了 range_agg 函数,可聚合多范围数据类型。

  • PostgreSQL 15 允许用户使用调用者(view caller)来创建查询数据的视图,而不是视图创建者的权限。这个选项称为 security_invoker,它增加了一个额外的保护层,以确保视图调用者拥有处理底层数据的正确权限。

更多逻辑复制选项

PostgreSQL 15 为管理逻辑复制提供了更大的灵活性。

  • 这个版本为发布者引入了行筛选列列表,允许用户选择从表中复制数据的子集。

  • PostgreSQL 15 增加了简化冲突管理的功能,包括跳过重播冲突事务的能力,以及在检测到错误时自动禁用订阅的能力。

  • 该版本还支持在逻辑复制中使用两阶段提交 (2PC)。

日志和配置增强

  • PostgreSQL 15 引入了一种新的日志格式:jsonlog。这种新格式使用定义的 JSON 结构输出日志数据,允许在结构化日志系统中处理 PostgreSQL 日志。

  • 在用户管理 PostgreSQL 配置方面,PostgreSQL 15 版本为数据库管理员提供了更大的灵活性,增加了向用户授予更改服务器级配置参数的权限的能力。

  • 此外,用户现在可以使用 psql 命令行工具中的 \dconfig 命令搜索有关配置的信息。

其他变化

  • PostgreSQL 15 使 ICU 排序规则成为集群或单个数据库的默认排序规则成为一种可能。

  • 该版本添加了一个新的内置扩展 pg_walinspect,它允许用户直接从 SQL 接口检查预写日志文件的内容。

  • PostgreSQL 15 还从公共 (或默认) 模式的所有用户(数据库所有者之外)撤销 CREATE 权限。

  • PostgreSQL 15 从 PL/Python 包中删除了长期被弃用的 “独占备份” 模式和对 Python 2 的支持。