由 PostgreSQL 全球开发小组 发表于 2023-09-14
2023年9月14日消息——PostgreSQL全球开发小组今天宣布发布PostgreSQL 16,这是世界上最先进的开源数据库的最新版本。
PostgreSQL 16提高了性能,在查询并行性、批量数据加载和逻辑复制方面有了显著的改进。这个版本中有许多面向开发人员和管理员的特性,包括更多的SQL/JSON语法、针对工作负载的新监控统计数据,以及在定义访问控制规则以管理大型团队的策略方面具有更大的灵活性。 “随着关系数据库模式的发展,PostgreSQL继续在搜索和管理大规模数据方面取得性能提升,”PostgreSQL核心团队成员Dave Page说。“PostgreSQL 16为用户提供了更多的方法来扩展和扩展他们的工作负载,同时为他们提供了新的方法来获得洞察力和优化如何管理数据。”
PostgreSQL是一个创新的数据管理系统,以其可靠性和健壮性而闻名,得益于全球开发者社区超过25年的开源开发,已经成为各种规模的组织首选的开源关系数据库。
PostgreSQL 16 改进了现有 PostgreSQL 功能的性能 通过新的查询规划器优化。在此最新版本中,查询规划器可以并行化和联接,为使用带有 OR 子句的聚合函数的查询生成更好的执行计划,对 SELECT DISTINCT 查询使用增量排序,并优化窗口函数以更有效地执行。它还改进了RIGHT和OUTER“反连接”(anti-joins),使用户能够识别连接表中不存在的行。
该版本包括在单操作和并发操作中使用COPY进行批量加载的改进,测试显示在某些情况下性能提高了300%。PostgreSQL 16在使用libpq的客户端中增加了对负载平衡的支持,并改进了vacuum策略,减少了冻结整个表的必要性。此外,PostgreSQL 16在x86和ARM架构中引入了使用SIMD的CPU加速,从而在处理ASCII和JSON字符串以及执行数组和子事务搜索时获得性能提升。
逻辑复制允许用户将数据流式传输到其它PostgreSQL实例或订阅者,这些实例或订阅者可以解释 PostgreSQL 逻辑复制协议。在PostgreSQL 16中,用户可以从备用实例执行逻辑复制,这意味着备用实例可以 将逻辑更改发布到其它服务器。这为开发人员提供了新的 工作负载分配选项,例如:使用备用数据库而不是繁忙的主数据库,用于以逻辑方式将更改复制到下游系统。
此外,PostgreSQL 16 中还有几项性能改进,以 逻辑复制。订阅者现在可以使用并行应用大型事务 工人。对于没有主键的表,订阅者可以使用 B 树 索引而不是顺序扫描来查找行。在某些条件下, 用户还可以使用二进制格式加快初始表同步。
对逻辑复制的访问控制改进在 PostgreSQL 16,包括新的预定义角色,它授予用户创建新的逻辑的能力 订阅。最后,此版本开始添加对双向的支持 逻辑复制,引入了在两个之间复制数据的功能 来自不同发布者的表。pg_create_subscription
逻辑复制允许用户将数据流传输到其它PostgreSQL实例或能够解释PostgreSQL逻辑复制协议的订阅者。在PostgreSQL 16中,用户可以从备用实例执行逻辑复制,这意味着备用实例可以将逻辑更改发布到其它服务器。这为开发人员提供了新的工作负载分布选项,例如,使用备用实例而不是繁忙的主实例在逻辑上将更改复制到下游系统。
此外,PostgreSQL 16在逻辑复制方面也有一些性能改进。订阅者现在可以使用并行工作者应用大型事务。对于没有主键的表,订阅者可以使用B-tree索引而不是顺序扫描来查找行。在某些条件下,用户还可以使用二进制格式加速初始表同步。
在PostgreSQL 16中,对逻辑复制的访问控制有几个改进,包括新的预定义角色pg_create_subscription,该角色授予用户创建新逻辑订阅的能力。最后,这个版本开始添加对双向逻辑复制的支持,引入了在来自不同发布者的两个表之间复制数据的功能。
PostgreSQL 16增加了SQL/JSON标准的更多语法,包括构造函数和谓词,如JSON_ARRAY(), JSON_ARRAYAGG()和IS JSON。这个版本还引入了对千位分隔符(例如5_432_000)和非十进制整数字面值(例如0x1538、012470和0b1010100111000)使用下划线的功能。使用PostgreSQL 16的开发人员也受益于psql中的新命令。这包括\bind,它允许用户准备参数化查询并使用\bind替换变量(例如SELECT 1::int + 2::int \bind 1 2 \g)。
PostgreSQL 16改进了对文本排序的一般支持,提供了文本排序的规则。PostgreSQL 16在构建时默认支持ICU,从环境中确定默认的ICU区域设置,并允许用户定义自定义ICU排序规则。
调优数据库工作负载性能的一个关键方面是了解I/O操作对系统的影响。PostgreSQL 16引入了pg_stat_io,这是一个用于粒度分析I/O访问模式的关键I/O指标的新来源。
此外,这个版本向pg_stat_all_tables视图添加了一个新字段,该字段记录了表示表或索引最后一次扫描时间的时间戳。PostgreSQL 16还通过记录传入参数化语句的值使auto_explain更具可读性,并提高了pg_stat_statements和pg_stat_activity使用的查询跟踪算法的准确性。
PostgreSQL 16为访问控制提供了更细粒度的选项,并增强了其它安全特性。该版本改进了pg_hba.conf和pg_identity .conf文件的管理,包括允许对用户名和数据库名进行正则表达式匹配,并包含外部配置文件的指令。
这个版本增加了几个面向安全的客户端连接参数,包括require_auth,它允许客户端指定他们愿意从服务器接受哪些身份验证参数,以及sslrootcert=”system”,它表明PostgreSQL应该使用客户端操作系统提供的可信证书颁发机构(CA)存储。此外,该版本增加了对Kerberos凭证委托的支持,允许postgres_fdw和dblink等扩展使用经过身份验证的凭证连接到受信任的服务。
PostgreSQL是世界上最先进的开源数据库,拥有一个由数千名用户、贡献者、公司和组织组成的全球社区。建立在超过35年的工程基础上,从加州大学伯克利分校开始,PostgreSQL继续以无与伦比的速度发展。PostgreSQL成熟的特性集不仅与顶级专有数据库系统相匹配,而且在高级数据库特性、可扩展性、安全性和稳定性方面都超过了它们。