PostgreSQL 圈子最近挺热闹,官方正式发布了 PostgreSQL 15 这个大版本。作为一名老 PG 用户,每次更新我都会第一时间跟进。说实话,PG 最近几个版本在性能上一直都挺给力的,这次 15 版本也没让人失望,在处理各种工作负载,不管是本地还是分布式,都有不少实打实的性能提升,尤其是在排序这块儿,简直是重点关照对象。用官方的话说,PG 15 能让开发者在构建高性能应用的同时,也能有更好的开发体验,并且数据安全杠杠的。
聊起 PostgreSQL,圈内人都知道它以稳定、可靠出名。这玩意儿在开源社区折腾了超过25年,积累下来的底子不是盖的。现在不管公司大小,选开源关系型数据库,PostgreSQL 绝对是绕不开的选项。
性能提升是重头戏:排序和压缩都亮了
这次新版,我最关注的就是性能。PG 15 对内存和磁盘上的排序算法都动了刀,官方给出的测试数据相当惊人,根据数据类型的不同,排序速度直接飙升 25% 到 400%!这可不是挤牙膏。另外,像 `row_number()`、`rank()`、`dense_rank()` 这些窗口函数也吃到了性能红利。连 `SELECT DISTINCT` 这种常用查询现在都能并行执行了,效率更上一层楼。
之前版本就有的异步远程查询功能,在 PG 15 里也得到了加强。它的外部数据包装器 `postgres_fdw` 现在支持异步提交了,玩分布式数据库的朋友们应该会很开心。
性能优化甚至延伸到了归档和备份。WAL 预写日志现在支持 LZ4 和 Zstandard (zstd) 压缩,这对某些场景来说,既省了硬盘空间,又提升了性能,一举两得。恢复速度也更快了,因为 PG 15 能在某些系统上预取 WAL 里面提到的页面。自带的备份工具 `pg_basebackup` 也支持在服务端直接用 gzip、LZ4、zstd 进行压缩。更牛的是,现在归档可以直接用自定义模块,省去了以前调用 shell 命令的开销,更纯粹高效。
开发者狂喜:MERGE 命令和更多实用功能
对于我们开发者来说,这次更新有个盼星星盼月亮终于盼来的功能——SQL 标准的 `MERGE` 命令!这意味着什么?以前要实现“有就更新,没有就插入”(Upsert)这种逻辑,得写一堆 `IF-ELSE` 或者用 `ON CONFLICT`,现在一条 `MERGE` 语句就搞定了,可以把 `INSERT`、`UPDATE`、`DELETE` 操作揉在一个条件语句里,代码瞬间清爽了不止一点半点。
新版本还加了几个处理字符串的正则表达式函数:`regexp_count()`, `regexp_instr()`, `regexp_like()` 和 `regexp_substr()`,处理文本数据更方便了。之前版本引入的 `multirange` 数据类型,这次也得到了 `range_agg` 函数的支持,可以做聚合了。
安全方面也有个贴心的改进。现在创建视图(VIEW)时,可以指定一个 `security_invoker` 选项。这样一来,查询视图时用的是调用者(当前用户)的权限,而不是视图创建者的权限。这增加了一层安全保障,确保用户不会通过视图看到他们本不该看的数据。
逻辑复制更灵活了
玩主从复制、数据同步的朋友们有福了。PG 15 的逻辑复制功能给了你更大的自由度。现在发布者可以设置行过滤和列列表,也就是说,你可以只复制表里的部分行、部分列,而不是一股脑全同步过去,对于数据精细化管理非常有用。冲突管理也更简单了,可以配置跳过冲突的事务,或者在出错时自动禁用订阅,运维起来省心多了。而且,现在逻辑复制也支持两阶段提交 (2PC) 了。
日志和配置的优化
这个改进我个人超喜欢:PG 15 引入了一种新的日志格式——`jsonlog`。顾名思义,日志会以标准的 JSON 结构输出。这意味着什么?你可以非常轻松地把 PG 日志对接到 ELK、Graylog 这类日志分析系统里,做监控、告警、数据分析都方便极了,再也不用头疼地去写正则解析那乱七八糟的文本日志了。
在配置管理上,DBA 的权限也更灵活了。现在可以授权普通用户去修改某些服务器级别的配置参数。另外,在 `psql` 命令行里,可以直接用 `\dconfig` 命令来搜索配置信息,找东西方便多了。
其他值得注意的变化
还有一些零散但同样重要的更新:
- 服务器级别的统计信息现在直接在共享内存里收集,不再需要一个专门的进程去定期写磁盘了,开销更小。
- ICU 排序规则现在可以设置为整个集群或者单个数据库的默认规则。
- 新增了一个内置扩展 `pg_walinspect`,让你可以直接用 SQL 查询来查看 WAL 日志文件的内容,调试和分析问题的好帮手。
- 安全收紧:默认情况下,`public` 模式的 `CREATE` 权限被收回了,只有数据库所有者才能在这个模式下创建对象,更安全了。
- 最后,一些过时的东西被移除了:长期弃用的“独占备份”模式拜拜了,PL/Python 也不再支持 Python 2 了,各位该升级的赶紧升级吧。
评论前必须登录!
注册