PostgreSQL 技术文章
Montreal 开发者大会:Developer U 计划补丁更新
摘要:
EDB 内部 PostgreSQL 开发培养计划的成员在蒙特利尔进行了第三次线下聚会。文章总结了此次会议讨论的议题、已提交的补丁内容,以及该小组下一步的工作方向。本次聚焦点集中在查询规划器的改进上,体现了通过结构化导师机制和线下协作培养新 PostgreSQL 贡献者的持续努力。
PostgreSQL Hacker 电子邮件讨论精选
在前端工具中停止使用已弃用且不安全的 PQcancel
Jelte Fennema-Nio 提交了 v8 补丁,旨在替换前端工具中已废弃且存在安全隐患的 PQcancel。前两个提交对现有取消逻辑进行了简化,可独立合并。主要改动包括:移除 psql 中与 CancelRequested 重复的 cancel_pressed 变量、修复 parallel_slot.c 中的取消处理逻辑,以及将 cancel_pipe 相关逻辑提取为公共辅助函数,在 pg_dump 和 wait_on_slots() 中复用。Heikki Linnakangas 曾建议通过新增 PQrequestCancel() 接口将取消功能内置到 libpq 中,但 Jelte 认为改动幅度过大,且与 pg_dump "发送取消请求后立即退出"的模型存在冲突,暂不采纳。
行模式识别
本次讨论围绕 PostgreSQL Row Pattern Recognition(RPR)特性展开。Jian He 提交了 v50 补丁,重构了导航偏移量的求值方式:原本在 ExecInitExprRec、ExecEvalRPRNavSet 等多处分散求值,现统一由 eval_define_offsets 在执行器初始化阶段集中处理。第二个补丁移除了共享的 nav_traversal_walker,改为在各文件中使用独立的静态 walker,以提升可读性。Tatsuo Ishii 对 v50-0006 中代价模型的变更提出疑问------新版按 DEFINE 变量计费,而非原来的 PATTERN 变量。Henson Choi 对此作出解释:由于解析器已保证每个 DEFINE 变量都出现在 PATTERN 中,两种方式实际上对相同的变量集合各计费一次,代价估算结果不变,只是消除了冗余的外层遍历。
原链接:https://pgnexus.ai/hacker-discussions?subject=Row pattern recognition
修复几个消息措辞和格式的问题
Peter Eisentraut 提交了一组与 PostgreSQL 消息措辞及格式整理相关的补丁。此前 Ashutosh Bapat 提出了若干代码风格改进建议,包括:将变量名从 objdesc 改为 rel 以与周边代码保持一致,将 getObjectDescriptor() 直接嵌入 appendStringInfo 调用中而非单独赋值给变量,以及将 InitStringInfo() 的位置移至更靠近实际使用处。Bapat 还指出,对 getObjectDescriptor() 返回字符串的 pfree 操作应在代码中保持一致性。补丁分为两部分:0008 为原始补丁,0009 为 Bapat 的代码风格修改。Eisentraut 确认上述更改已全部提交。
原链接:https://pgnexus.ai/hacker-discussions?subject=A few message wording%2Fformatting cleanup patches
PATCH 修复 bug #19474:在非确定性排序规则下 LIKE 无法匹配字面反斜杠的问题
该补丁(v3)旨在修复 bug #19474------在使用非确定性排序规则时,LIKE 无法匹配字面反斜杠。Tom Lane 审查后认为补丁尚未准备好,理由是它引入了不必要的复杂性来解决一个并不存在的问题。由于 PostgreSQL 在后端安全编码下运行,多字节字符的单个字节不可能匹配 \、_ 或 %,因此现有代码不考虑多字节边界并无错误。Lane 承认真正的 bug 在于连续反斜杠的处理逻辑有误,需要修复,但补丁不应为不存在的问题增加额外复杂度。
uuidv7 函数对 1970-01-01 之前的日期处理不当
该线程讨论了 uuidv7 错误接受 1970-01-01 之前时间戳的 bug。Baji Shaik 根据 Masahiko Sawada 的审查意见提交了 v4 补丁:修复方案改为在 PostgreSQL-epoch 单位下预计算合法时间戳范围(UUIDV7_MIN_TIMESTAMP / UUIDV7_MAX_TIMESTAMP),直接对移位后的 TimestampTz 进行校验,无需再转换回 Unix epoch,从而彻底消除了溢出风险。两处边界检查也合并为单个 if 语句。处理无限区间的 0001 补丁与 v3 相比保持不变。Zsolt Parragi 对 v4 给予正面评价,仅提出一处可选的细节建议:某条测试注释中提到"overflow"的说法已不再准确,建议简化措辞。
原链接:https://pgnexus.ai/hacker-discussions?subject=uuidv7 improperly accepts dates before 1970-01-01
GSoC 2026 B-tree 索引臃肿优化方案讨论
Andrey Borodin 回复了一个 GSoC 2026 关于 B-tree 索引膨胀优化的提案,提出两项设计简化建议。其一,前向扫描在页面合并后的去重无需保存 TID 数组(savedMergeTids),只需记录最后返回的 (key, heapTID) 作为单一水位线即可,因为叶层已按该字段全序排列。这也消除了 Matthias 指出的并行扫描状态过大的问题。其二,他认为 MERGED_AWAY 页状态在语义上与现有的已删除/墓碑页生命周期完全一致,左页(L)可直接复用现有的 HALF_DEAD→DELETED(safexid)→可回收流程,从而避免当前方案中"两个 horizon"的回收代价。他的结论是,存活右页上的 BTP_MERGED 才是唯一真正需要新增的概念。
行业新闻
Anthropic 与 Samsung 探讨定制 AI 芯片开发合作
摘要:
据 TechCrunch 报道,Anthropic 正与 Samsung 就研发定制 AI 芯片展开洽谈。此前,OpenAI 刚宣布与 Broadcom 合作推出自研 AI 芯片。主要 AI 公司纷纷寻求摆脱对第三方硬件的依赖、针对自身工作负载优化性能,这一趋势正推动行业加速布局自有芯片。目前,双方尚未披露芯片规格、研发时间表或合作条款等细节,但此举凸显了 AI 企业在专用硬件基础设施领域愈发激烈的竞争态势。
Mark Zuckerberg 坦言 Meta AI 代理进展不及预期
摘要:
据报道,Meta CEO Mark Zuckerberg 在一次内部会议上向员工坦言,公司 AI 智能体的研发进展未能达到预期。这一罕见的公开表态,揭示了这家全球最大科技公司之一在构建实用 AI 智能体方面所面临的挑战。尽管 Meta 持续在旗下平台上加大 AI 投入,但 Zuckerberg 的表态表明内部预期与实际进展之间存在落差。考虑到 Meta 在 AI 领域的雄心壮志及其与 OpenAI、Google 等竞争对手争夺资源的力度,此番表态尤为引人关注。
社交媒体动态
Postgres 数据校验和的前世今生:从 9.3 到 19 的演进
摘要:
Postgres 自 2013 年的 9.3 版本起就支持数据校验和,但时至今日,仍有大量生产集群未启用该功能。主要原因在于启用成本过高:需要完全停机,通过 pg_checksums 扫描全部磁盘页,并重建所有副本,整个过程可能耗时数小时且无法回滚。Postgres 18 将新集群的默认值改为开启,但对已有集群无能为力。Postgres 19 为此引入了 pg_enable_data_checksums() 函数,可在不停机的情况下在后台完成转换,整个过程通过 WAL 记录日志,备库也会自动同步更新。与此同时,data_checksums 参数现已改为枚举类型,方便追踪转换进度。
我们以为世界是静止的
摘要:
CYBERTEC首席执行官Hans-Juergen Schoenig在GITEX AI EUROPE上发表观点,指出当今商业环境正面临日益加剧的不稳定性。他强调,地缘政治风险、网络安全威胁以及供应链脆弱性,是大多数企业长期低估的深层隐患。在此背景下,构建具备韧性与合规性的数据库基础设施已不再是锦上添花,而是这个时代的核心挑战。他的核心论点是:认为世界一成不变是一种危险的误判,企业必须从技术底层着手,主动应对变化。
Addepar 借助 Databricks 统一数据、分析与 AI 基础设施
摘要:
Addepar 平台管理着近 9 万亿美元的资产,目前已全面采用 Databricks 来统一数据、分析与 AI 基础设施。在此基础上,Addepar 推出了原生 AI 助手 Addison,帮助投资专业人士分析投资组合、主动挖掘洞察并借助受治理的金融数据自动化工作流程。迁移至 Databricks 后,Addepar 的数据管道成本降低了 60%,基础设施节省超过 200 万美元,管道开发速度提升了 5 倍,有效支撑了平台规模化生成式 AI 工作流的落地。