gistkillitems 重扫描时可能标错死元组
Peter Geoghegan 指出 gistkillitems() 在 rescan 时可能把 LP_DEAD 标记打到错误的元组上,问题很可能由提交 9c9ddf109 引入,只影响 master,但各版本在 rescan 时都没有正确重置状态。Michael Paquier 和 Andrey Borodin 确认,即便开着 wal_consistency_checking,buildfarm 也没能抓到,因为现有测试没进主回归套件。
pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
当天收录 22 条。
Peter Geoghegan 指出 gistkillitems() 在 rescan 时可能把 LP_DEAD 标记打到错误的元组上,问题很可能由提交 9c9ddf109 引入,只影响 master,但各版本在 rescan 时都没有正确重置状态。Michael Paquier 和 Andrey Borodin 确认,即便开着 wal_consistency_checking,buildfarm 也没能抓到,因为现有测试没进主回归套件。
Heikki Linnakangas 指出新的 BufTableDelete() 让 InvalidateBuffer() 持缓冲区头部自旋锁的时间过长。Alexandre Felipe 认为问题不在持锁时长,而在自旋锁下操作的安全性难以论证,提出两步删除:取锁前完成查找,持锁期间只断开链表。他在 Dhruv Aron 的补丁上实现了这一方案,并加了按 Buffer 删除的变体,比按 BufferTag 删除快约 30%。
Tom Lane 修掉 PL/Perl 的两个缺陷:hstore_plperl 的空指针解引用,以及处理 Perl tied 对象时的无限循环,两者都不算安全漏洞,未进上一轮安全补丁。修复后取到的却是 SQL NULL,Andrey Rachitskiy 解释 tied hash 不把值放在 HeVAL() 里,必须经 hv_iterval() 加 SvGETMAGIC() 才触发 FETCH,随后提交了覆盖所有转换路径的补丁和回归测试。
Dinesh Kumar 用 Go 写了 MIT 许可的 pgsonify,把数据库健康状况变成实时音效。它默认每 5 秒采样 pg_stat_activity、pg_locks、pg_stat_database 和检查点视图,不需要扩展或超级用户权限,据此算出 0 到 1 的压力分,驱动背景轰鸣的音高与节奏,分 CALM、ALERT、PANIC 三档。作者定位于开发、测试和教学,不替代生产监控。
两个参数都默认开启,前者把 WHERE 子句、目标列表和聚合状态转换编译成机器码,后者生成专用的元组解构代码。Christophe Pettus 提醒两者并不对称:解构代码只在编译消费它的表达式时才产生,关掉 jit_expressions 整个 JIT 块就消失了。它们归在开发者选项下,只适合排查时用来判断是不是表达式编译器出错;要控制 JIT 开销应该调代价阈值或整体关闭。
新插入的元组可能落在已标记 BTP_MERGED_AWAY 的页面上导致不可见,新补丁已修复,WAL 支持还没做。
Mats Kindahl 反对强制转成原生列存格式,主张把过滤和聚合下推进 TTS,由存储引擎按自己的格式执行。
同步槽的豁免会从 CanInvalidateXidAgedSlot() 移除,idle_replication_slot_timeout 的豁免保留。
九个选项从社会契约禁令到有条件接受,8 月 28 日截止,结果会影响补丁溯源与贡献审查方式。
作者改动 Zsh 让异常路径提早崩溃,再靠 core dump 收敛根因,问题出在历史文件的重写流程上。