使用最新版本的PostgreSQL 16,将可以获得更好的功能、更可靠和更高的性能,并增加更多的安全性。
以下是在选择升级时考虑的7大理由:
1. 生命周期
PostgreSQL 11 的小版本支持将于 2023 年 11 月 9日结束。该日期之后将不再有任何安全修复。如果存在任何重大安全漏洞,就会面临很高的风险,并且会暴露数据风险。
PostgreSQL 的版本历程如下图:

参考链接:https://en.wikipedia.org/wiki/PostgreSQL
从图中可以看出,PostgreSQL 16 是第三十个发行版本,您可以找到它的发布说明。
https://www.postgresql.org/about/news/postgresql-16-released-2715/
2. 安全性
PostgreSQL 16的安全性是进行升级的重要原因之一。
在PostgreSQL 16里,使用initdb工具初始化时生成的初始用户不允许移除超级用户权限,初始用户即便没有超级用户权限也可以通过修改pg_catalog模式下的系统表来获得超级用户权限,PostgreSQL 16之前的版本允许移除超级用户并不符合安全预期。
PostgreSQL 16对grant命令的语法进行了扩展,新增了with inherit和with set选项。当我们对新建用户赋权系统预置角色时,可以使用with inherit true选项赋予成员角色,之后不需要显式切换到成员角色即可进行相关的操作。当我们自定义的角色需要设置成员角色时,为了安全起见需要显式切换角色,此时可以设置with set true选项。
PostgreSQL 16对createrole角色属性的权限也提升了安全性,在PostgreSQL 16里使用带createrole属性创建新用户时,有如下变化:
3. 并行能力
PostgreSQL 16并行查询能力有如下方面的提升:
PostgreSQL 16还有其他一些性能方面的提升,包括:
4. 易于管理和配置,可用性提升
PostgreSQL 16提供了方便的配置和管理新功能,进而提升可用性。
首先,pg_hba.conf文件配置更高效,在PostgreSQL 16里可以使用正则表达式更加简洁的配置database项和user项:
local "/^mydb[0-9]+$,/" all trust host all "/_readonly$" all scram-sha-256
第一行正则表达式匹配以mydb为前缀并带数字的database,第二行正则表达式匹配以_readonly结尾的user。
PostgreSQL 16还支持pg_hba.conf文件里使用include关键字,使用以下三种方式来包含文件或目录:
前两种方式允许包含文件,第三种方式允许使用目录。
其次,PostgreSQL 16对psql工具做了如下的提升:
\watch interval=3
PostgreSQL 16新增count选项可以控制命令重复执行的次数,语法如下:
\watch interval=3 count=2
选项interval和count也可以简写为i,c:
\watch i=3 c=2
此外,PostgreSQL 16对vacuum命令及vacuumdb工具做了如下的增强:
vacuum(analyze, buffer_usage_limit 0) tab;
5. 详细的I/O诊断信息,方便DBA甩锅
PostgreSQL 16引入了一个非常重要的 I/O 统计视图pg_stat_io,pg_stat_io视图对I/O的统计粒度比较细,分为三个大的标签维度:进程类型(backend_type字段)、关系类型(object字段)、操作上下文类型(context字段) ,以及如下八个指标维度:
从上面三个大的维度以及八个细粒度的指标,可以从数据库侧清晰地看到I/O详情。例如观测到I/O写压力是由数据大量写入而对表数据文件扩块引起,这是正常行为。如果是由刷盘写入引起,则可以进行参数调优。
6. 逻辑复制不受主备切换影响,可安心的发布订阅数据表
PostgreSQL 16支持standby节点逻辑解码,通过新的pg_log_standby_snapshot()函数捕获正在进行中事务的快照并将其存储在WAL文件中,从而避免对检查点的依赖。
PostgreSQL 16还可以区分数据变化是由用户的SQL语句或replication复制引起,在创建订阅时可设置发布端不发布replication复制源,从而避免陷入复制循环。
PostgreSQL 16对逻辑复制还有一些其他方便的改进,包括:并行应用大事务、初始数据同步支持二进制格式、订阅端允许以表owner执行、实时逻辑解码。
7. SQL:2023新标准,PostgreSQL比商业数据库支持更全面
PostgreSQL 16对最新的SQL标准2023新增了如下支持:
ERROR: column "XXX" must appear in the GROUP BY clause or be used in an aggregate function
any_value函数不仅提供了查询的便利性,而且只从每个分组获取一个值,降低了计算成本,也提升了性能。
最后
选择升级的原因有很多:有些人可能会优先考虑可靠性,有些人可能会考虑安全性,有些人可能是出于兼容性原因。
总而言之,升级到最新版本可以从今晚(9月14号)开始。
同时也欢迎大家关注本人出版的新书:<<快速掌握PostgreSQL版本新特性>>,书稿简介可以参考我写的这篇文章: PostgreSQL版本新特性顺利完稿
对本书感兴趣的朋友或者需要进群 请加本人微信skypkmoon并备注PG乐知乐享。
编辑推荐:
- 请不要固步自封,升级到 PostgreSQL 16 的 7 大理由!03-14
- 几个提高性能的小特性03-14
- DOMAIN域对象的使用介绍03-14
- PG 15 Merge Into语法测试03-14
- PostgreSQL "in place" tablespaces03-14
- 两个与性能相关的压缩参数03-14
- PostgreSQL千万数据量下的DDL变更影响03-14
- 致敬PostgreSQL 11退役 |巴音布鲁克永远的干!03-14
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
