PostgreSQL 17 Beta1 发布,酷克数据再次贡献核心力量

2024-06-05 17:36

本文主要是介绍PostgreSQL 17 Beta1 发布,酷克数据再次贡献核心力量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

得益于全球的开发者贡献,PostgreSQL已成长为一款拥有众多全球用户和贡献者、成熟稳定的开源数据库。2024年5月23日,PostgreSQL全球开发组宣布,PostgreSQL 17的首个 Beta 版本现已开放下载。本次新版本带来了众多惊喜。值得一提的是,本次发布中,酷克数据HashData研发团队参与了多出核心代码贡献,为PostgreSQL项目与社区提供了有力支持。

PostgreSQL 17功能亮点

查询和写入性能优化

PostgreSQL 17(以下称“PG17”)致力于优化和提升整体的系统性能。负责回收存储空间Vacuum进程采用了新数据结构,使得垃圾回收过程的内存使用减少,最高可以减少 20 倍,并缩短执行时间。 Vacuum 进程不再受1GB内存限制,由 maintenance_work_mem 来控制。引入流式I/O接口,提升了顺序扫描和运行 ANALYZE 的性能。新增配置参数,可控制事务、子事务和multixact缓冲区大小。PG17利用Planner统计信息和CTE(即 WITH 查询)结果中的排序顺序,进一步优化查询速度。对于包含IN子句和B-tree索引的查询,执行时间得到显著缩短。对于带有NOT NULL约束的列,PostgreSQL能够自动优化冗余的IS NOT NULL语句,同样,对于IS NULL的查询也进行了优化。此外,支持并行构建BRIN索引。在高并发写入场景下,PG17通过改进预写日志(WAL)锁管理,实现了高达两倍的性能提升。最后,新版本还引入了更多显式的SIMD指令,如AVX-512,为bit_count等函数提供了硬件加速支持。

分区和分布式工作负载增强

PG17的分区管理更为灵活,支持拆分与合并分区,并允许分区表使用身份列(Identity Column) 和排它约束(Exclude Constraints)。同时,postgres_fdw支持将EXISTS和IN子查询下推至远端服务器提升性能。PG17为逻辑复制添加了新功能,简化了高可用架构和升级流程。PG17使用 pg_upgrade升级到更高版本时,无需删除复制槽。支持Failover控制,为高可用性架构中管理 PostgreSQL 提供了更好的可控制性。PG17还允许逻辑复制的订阅者使用 hash 索引进行查找,并引入了 pg_createsubscriber 命令行工具,用于在使用物理复制的副本从库上创建逻辑复制。

开发者体验

PG17深化了 SQL/JSON 支持,新增了 JSON_TABLE 功能,支持将JSON 转换为标准 PostgreSQL 表,以及 SQL/JSON 构造函数(JSON、JSON_SCALAR、JSON_SERIALIZE)和查询函数(JSON_EXISTS、JSON_QUERY、JSON_VALUE)。此外,PG17为 jsonpath 的实现增添了更多功能,包括将 JSON 值转换为各种不同特定数据类型。MERGE 命令现支持 RETURNING 子句,便于处理修改后的行。merge_action 函数可识别 MERGE 命令的修改部分。PG17还允许使用 MERGE 命令更新视图,并新增 WHEN NOT MATCHED BY SOURCE 子句,以指定当源行无匹配时提供操作。COPY用于从PostgreSQL高效批量加载和导出数据,在PG17中,导出大行时的性能最多有两倍的提升。当源与目标编码匹配时,COPY性能亦有所提升。COPY新增 ON_ERROR 选项,允许在插入错误时继续执行。PG17还支持使用 libpq API 使用异步和更为安全的查询取消方法。PG17引入内置的排序规则提供程序,该提供程序提供与 C 排序规则类似的排序语义,但编码为 UTF-8 而非 SQL_ASCII,提供不变性保证,确保排序结果跨系统一致。

安全功能

PG17引入了新连接参数 sslnegotiation,允许 PostgreSQL 在使用 ALPN时直接进行 TLS 握手,减少一次网络往返。同时在 ALPN 注册为 postgresql。此版本还添加了用户认证时触发的新 EventTrigger,以及在 libpq 中新增 PQchangePassword API,实现客户端自动对密码取哈希,提升安全性。另外,新增了预定义角色 pg_maintain,赋予用户执行多种维护权限,并确保 search_path 在执行维护操作时的安全性。最后,支持使用 ALTER SYSTEM 设置系统无法识别的未定义的配置参数。

备份与导出管理

PG17可以使用 pg_basebackup进行增量备份,并增加了一个新的实用工具 pg_combinebackup,用于备份恢复过程中将备份合并。该版本为 pg_dump新增了一个参数项 --filter,允许指定一个文件来进一步指定在 dump 过程中要包含或排除哪些对象。

监控

EXPLAIN命令现增加SERIALIZE和MEMORY选项,分别展示数据序列化耗时和优化器内存使用情况。同时,EXPLAIN还能显示I/O读写耗时。PostgreSQL 17统一了pg_stat_statements中CALL的参数,减少了频繁调用的存储过程记录数。此外,VACUUM进度报告现在会显示索引垃圾回收的进度。PG17还引入了一个新视图,pg_wait_events,提供关于等待事件的描述,可以与 pg_stat_activity 共同使用,以便深入了解活动会话出现等待的原因。此外,pg_stat_bgwriter视图中的一些信息,现在被拆分到新的 pg_stat_checkpointer视图中了。

HashData研发团队贡献核心力量

HashData研发团队一直活跃于PostgreSQL社区。在PostgreSQL 15、16等多个版本中,都能看到HashData研发团队以代码编写、审核、检测等方式参与了数十项开源贡献,为PostgreSQL性能改进和提升提供了有力支持。在最新发布的PG17版本中,HashData研发团队也参与了几项重要贡献:示例一:极具实用性的全新feature,极大地提升了批量导入数据的便捷性0b2b34784d93696008069ca7bf084923.jpegHashData研发团队贡献信息值得一提的是,这是Hashdata第一次有feature进入社区代码,意味着我们的技术能力得到了更广泛的认可与关注。COPY FROM命令是PostgreSQL中用于批量导入数据的强大工具。在数据处理过程中,根据数据和用户定义情况,某些列可为空值。用户可以为这些列设置默认选项,强制为空或者不为空。以往,用户需要逐一设置每一列的空值设置,这在处理大量列(例如,PostgreSQL默认支持的上限是1600列)时变得极为繁琐。全新的feature 为COPY FROM 命令增加FORCE_NULL *和FORCE_NOT_NULL *选项,允许用户轻松的为数据的所有列设置强制为空,或不为空,极大地提高了数据导入的效率。

  • 示例二:代码重构,提升了代码的简洁性和执行的高效性

163b7fa6bb3d4a5cddbfe8f80344c279.jpegHashData研发团队贡献信息PostgreSQL支持LIMIT、FETCH等语句,这些语句在内部通过不同的枚举选项来实现。然而,HashData团队在深入阅读和理解代码后,发现LIMIT_OPTION_DEFAULT这一选项实际上是多余的,PostgreSQL的解析树已经能够充分表达相应的逻辑。经过严格的验证测试,清理了这部分不必要的代码,提升了PostgreSQL代码的简洁性和执行的高效性。此外,HashData的研发团队还积极参与了代码的Review工作,凭借严谨的态度和专业的技能,为PostgreSQL新版本的稳定性和性能提供了有力保障。

结语

在全球开源社区的共同努力下,PostgreSQL已经发展成为一款功能强大、稳定可靠的开源数据库,广泛应用于各行各业。随着本次beta版本的发布,我们看到了PostgreSQL 17在性能优化、功能增强和安全提升等方面的显著进步。酷克数据HashData研发团队饮水思源,通过代码贡献、PG技术讲解等方式,不断以开源精神和技术实力回馈社区。 凭借团队对技术创新的不懈追求,酷克数据打造了一款面向分析和AI场景的下一代统一型开源数据库产品CloudberryDB,搭载了PostgreSQL 14.4 内核。CloudberryDB既能满足单机本地快捷部署,也能通过插件自由扩展为云原生架构,具备高弹性、高并发、湖仓一体化、扩缩容灵活等优势。同时,CloudberryDB支持丰富的数据类型和数仓/AI混合负载,可开展SQL分析、机器学习、全文检索、HTAP等任务,通过数据存储加密、联合⾝份验证等技术手段,帮助企业更方便地自建高效稳定的数据底座。f19a6eb7c650fa2619fc4c33c071bdd6.jpegCloudberryDB灵活部署形态
95db6aed842e53fe576522c6b27870de.jpegCloudberryDB产品兼容生态
CloudberryDB正在以国际标准、高点定位、全球眼光的运营理念,构建开放、友好、中立的开源社区。我们也期待有更多的开源爱好者加入我们,为开源世界贡献我们的一份力量。CloudberryDB GitHub 地址:https://github.com/cloudberrydb/cloudberrydb,欢迎大家访问体验。
参考链接:1、PG 17 Beta1版发布官方新闻:https://www.postgresql.org/about/news/postgresql-17-beta-1-released-2865/2、PG 17 Beta1版发布说明:https://www.postgresql.org/docs/17/release-17.html3、PG 17 Beta1版下载地址:https://www.postgresql.org/download/

这篇关于PostgreSQL 17 Beta1 发布,酷克数据再次贡献核心力量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1033722

相关文章

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I