REPACK CONCURRENTLY 的按库快照可能被回退
REPACK CONCURRENTLY 用的按数据库划分快照被发现有根本性正确性问题。Antonin Houska 说明,处理运行事务记录时对按库记录提前返回却没调整 xmin,于是 XID 低于 oldestRunningXid 的事务会被当成仍在运行,根子是 COMMIT 记录不保证按创建顺序跟在运行事务记录之后。压力测试因此报唯一索引重复键和除零错误。他可能放弃该特性,Alvaro Herrera 建议回退相关提交。
pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
当天收录 18 条。
REPACK CONCURRENTLY 用的按数据库划分快照被发现有根本性正确性问题。Antonin Houska 说明,处理运行事务记录时对按库记录提前返回却没调整 xmin,于是 XID 低于 oldestRunningXid 的事务会被当成仍在运行,根子是 COMMIT 记录不保证按创建顺序跟在运行事务记录之后。压力测试因此报唯一索引重复键和除零错误。他可能放弃该特性,Alvaro Herrera 建议回退相关提交。
在线开关校验和的功能又找出两个缺陷。Satyanarayana 发现 pg_enable_data_checksums() 的两个成本限制参数因全局变量没同步而失效,同时对 unlogged 关系做了多余的 WAL 记录。Daniel Gustafsson 确认并备好补丁。Ayush Tiwari 指出 unlogged 关系的 init fork 在恢复期间仍需写 WAL 才能保持备库一致,测试证实这会导致故障转移后校验和验证失败。
CYBERTEC 列出了自己进入 PostgreSQL 19 的贡献。分量最重的是 Antonin Houska 的 REPACK CONCURRENTLY,用新建表加逻辑复制再整体替换的方式做在线重组;同出他手的还有 eager aggregation,让规划器把聚合下推到连接之前。Laurenz Albe 修好了 vacuumdb 对分区表的处理,并把 log_lock_waits 默认改成开启。
扩展 pg_sorted_heap 发布 0.13.0。它提供按主键让行物理有序的表访问方法 sorted_heap,并用每页 zone map 裁剪堆块;配套的 sorted_hnsw 是与规划器集成的 HNSW 索引访问方法,面向内置向量类型;svec 与 hsvec 提供 float32 与 float16 向量类型;另有一组面向事实的 GraphRAG 辅助函数。作者是 Sergey Kuznetsov。
Tiger Data 的 Matty Stratton 说明只追加的表为什么也一直被 autovacuum 收费。来源有三处:中止的事务会留下要清理的死元组;首次读取时改写提示位会弄脏页面;插入量大会触发防回绕的冻结。常规调参只是把这些工作挪到别的时间,并没有消掉工作本身。他把这归为 MVCC 存储模型与不需要并发行修改的负载之间的错配,并称 Hypercore 这类专用存储模型可以完全去掉这些条件。
Tomas Vondra 写清了 PostgreSQL 提交者的产生方式。约三十位提交者都参与:二月到三月在提交者私有邮件列表上提名,随后讨论评估,五月中旬定案并联系候选人,最后在 hackers 列表公布。核心组正式发出提交权限,也保留否决权,但很少推翻提交者的意见。看的是多年持续的实质贡献、是否负责维护某块代码、是否评审并帮助其他贡献者、代码质量是否不需要反复返工。落选者会收到反馈。
Dilip Kumar 提议改 ACL 检查,让冲突表只允许 DELETE 与 TRUNCATE,挡住手工插入和更新。
Amit Kapila 主张修进 19,Euler Taveira 担心打乱日志分析工具,建议留到 20 再改。
Bharath Rupireddy 改用 try_table_open(),避免并发 DROP TABLE 时抛出无法按 OID 打开关系。
Alexander Lakhin 把 max_connections 调到 10,就在 FreeBSD 和 Linux 上复现了段错误与挂起。