PG19 外键批处理缺陷让约束被误标为已验证
Amit Langote 为 PostgreSQL 19 的外键快速路径批处理提交三个修订补丁,起因是 Noah Misch 批评此前把批处理限制在顶层事务。0001 移除该限制,改用子事务标记跟踪缓存条目。0002 修一处数据损坏:PL/pgSQL 的 EXCEPTION 块捕获外键检查错误后 firing_depth 未递减,同一事务里后续的 ALTER TABLE ... ADD FOREIGN KEY 会在有违规行时静默通过。
pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
当天收录 37 条。
Amit Langote 为 PostgreSQL 19 的外键快速路径批处理提交三个修订补丁,起因是 Noah Misch 批评此前把批处理限制在顶层事务。0001 移除该限制,改用子事务标记跟踪缓存条目。0002 修一处数据损坏:PL/pgSQL 的 EXCEPTION 块捕获外键检查错误后 firing_depth 未递减,同一事务里后续的 ALTER TABLE ... ADD FOREIGN KEY 会在有违规行时静默通过。
全库 VACUUM 遇到并发删表的修复补丁走到 v8,关键是防止无特权用户对无权访问的关系申请 AccessExclusiveLock。缺少权限检查时,普通用户执行 VACUUM FULL 就能把强锁请求排进队列,阻塞所有新连接。Bharath Rupireddy 指出在 get_all_vacuum_rels() 的 ACL 检查里改用 _ext() 变体可以避开回归。Nathan Bossart 确认数日内提交。
Bryan Green 重整了补丁,把 pg_dump 的并行 worker 统一到线程实现。0001 与 0002 是 Windows 专属改动:fmtId() 的缓冲区改为 _Thread_local,进程内 channel 取代回环 socket。0003 到 0005 依赖 Thomas Munro 的 pg_threads.h 推广到其他平台,删掉 fork() 与 pgpipe(),64 个 worker 的上限也一并取消。
pg_buffercache 正在讨论新增 pg_buffercache_relations(),把按关系的缓冲区聚合放到 C 层完成。Khoa Nguyen 在 shared_buffers 为 400GB 的机器上测 v2 补丁,比 SQL 侧聚合快约 25 倍。v3 把 usagecount_avg 换成 usagecount_total,并加上 work_mem 上限控制。超限时报错还是只写进文档,目前仍有分歧。
Jacob Champion 和 Michael Paquier 一致认为把 OpenSSL 3.0 定为 PostgreSQL 20 的最低要求合理,这意味着放弃 1.1.1。Michael 指出 OpenSSL 3.0 自身将在 2026 年 9 月停止维护,但对 PG20 可以接受。Jacob 原以为 3.0 会像 1.0.2 那样被发行版长期保留,RHEL 中途升到 3.5 出乎意料。Tom Lane 认为动因是后量子密码学。
Zsolt Parragi 提议用结构化格式替换 pg_hba.conf、pg_ident.conf 这些配置文件,候选是 TOML 和 JSON5。Matthias van de Meent 反对 TOML,理由是依赖上下文的表语义不适合配置文件。Andrew Dunstan 认为在现有解析器里加 JSON5 改动很小,主要在词法分析器。Greg Sabino Mullane 要求先给出默认 pg_hba.conf 在新格式下的样子。
Neon 给自家 CLI 加了 neon api 命令,同时解决两个问题:面向人设计的 CLI 通常落后于底层 API 的完整能力,而让 AI agent 直接调用原始 API 又有泄露密钥的风险。新命令把 API 访问包成可预期的受控调用,保留完整能力的同时把凭证留在 CLI 一侧。作者 Anthony Giuliano 称它更适合 agent 驱动的自动化工作流。
AWS 在 7 月 8 日宣布 Amazon Aurora DSQL 的 change data capture 一般可用。分布式 SQL 数据库缺少稳定的变更捕获就很难接进真实的生产数据流,CDC 转入 GA 意味着 Aurora DSQL 开始补齐从 OLTP 到事件、分析和搜索系统的下游链路。在它与 Aurora PostgreSQL 之间选型时,可以把 CDC 是否生产可用一并纳入评估。
已合并的提交只建了冲突日志表骨架,真正写入冲突记录的补丁仍在审查。
vacuum 对持有中的槽直接跳过,最坏情况要等一个 checkpoint_timeout 才被清理。
Tom Lane 指出 fmgr_info_copy() 会重置 fn_extra,VARIADIC 的每个参数都要重填缓存。
pqDrainPending() 先更新 inEnd 再查错误返回,另修 LibreSSL 下缺 INT_MAX 的编译失败。
兄弟 NESTED PATH 的列会静默丢失,反解析丢括号,dump 丢掉 ERROR ON EMPTY 子句。
每条 WAL 记录多出三次唤醒调用处在热路径,拟按等待类型分层把内存屏障合并成一次。
压力来自创新节奏、负载增长和 AI 数据需求,问题被归到平台可扩展性而非关系模型。
列式数据库在日志与事件分析上的采用,会改变它与 PostgreSQL、Loki 等系统的边界。
边缘平台的竞争正从 CDN 与 Worker 延伸到全球状态、一致性和配置传播。
实现语言迁移会牵动安全、性能、贡献者生态和长期维护,不只是短期跑分问题。
企业内部 fork 的组件从此有一等的安全通告、私有修复协作和补丁传播流程。