↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

PostgreSQL 博览 RSS

保留原始来源与发布日期的新闻、博客和活动。

6 条内容

REPACK CONCURRENTLY 的按库快照可能被回退

Antonin Houskapgsql-hackers 邮件列表

REPACK CONCURRENTLY 用的按数据库划分快照被发现有根本性正确性问题。Antonin Houska 说明,处理运行事务记录时对按库记录提前返回却没调整 xmin,于是 XID 低于 oldestRunningXid 的事务会被当成仍在运行,根子是 COMMIT 记录不保证按创建顺序跟在运行事务记录之后。压力测试因此报唯一索引重复键和除零错误。他可能放弃该特性,Alvaro Herrera 建议回退相关提交。

在线开关校验和又查出两个缺陷

Daniel Gustafssonpgsql-hackers 邮件列表

在线开关校验和的功能又找出两个缺陷。Satyanarayana 发现 pg_enable_data_checksums() 的两个成本限制参数因全局变量没同步而失效,同时对 unlogged 关系做了多余的 WAL 记录。Daniel Gustafsson 确认并备好补丁。Ayush Tiwari 指出 unlogged 关系的 init fork 在恢复期间仍需写 WAL 才能保持备库一致,测试证实这会导致故障转移后校验和验证失败。

CYBERTEC 盘点自己进入 PostgreSQL 19 的工作

Christoph BergCYBERTEC 博客

CYBERTEC 列出了自己进入 PostgreSQL 19 的贡献。分量最重的是 Antonin Houska 的 REPACK CONCURRENTLY,用新建表加逻辑复制再整体替换的方式做在线重组;同出他手的还有 eager aggregation,让规划器把聚合下推到连接之前。Laurenz Albe 修好了 vacuumdb 对分区表的处理,并把 log_lock_waits 默认改成开启。

pg_sorted_heap 0.13.0 带来物理有序堆与向量检索

Sergey KuznetsovGitHub

扩展 pg_sorted_heap 发布 0.13.0。它提供按主键让行物理有序的表访问方法 sorted_heap,并用每页 zone map 裁剪堆块;配套的 sorted_hnsw 是与规划器集成的 HNSW 索引访问方法,面向内置向量类型;svec 与 hsvec 提供 float32 与 float16 向量类型;另有一组面向事实的 GraphRAG 辅助函数。作者是 Sergey Kuznetsov。

只追加的表也一直在为 autovacuum 付费

Matty StrattonTiger Data 博客

Tiger Data 的 Matty Stratton 说明只追加的表为什么也一直被 autovacuum 收费。来源有三处:中止的事务会留下要清理的死元组;首次读取时改写提示位会弄脏页面;插入量大会触发防回绕的冻结。常规调参只是把这些工作挪到别的时间,并没有消掉工作本身。他把这归为 MVCC 存储模型与不需要并发行修改的负载之间的错配,并称 Hypercore 这类专用存储模型可以完全去掉这些条件。

PostgreSQL 的提交者是这样选出来的

Tomas Vondravondra.me

Tomas Vondra 写清了 PostgreSQL 提交者的产生方式。约三十位提交者都参与:二月到三月在提交者私有邮件列表上提名,随后讨论评估,五月中旬定案并联系候选人,最后在 hackers 列表公布。核心组正式发出提交权限,也保留否决权,但很少推翻提交者的意见。看的是多年持续的实质贡献、是否负责维护某块代码、是否评审并帮助其他贡献者、代码质量是否不需要反复返工。落选者会收到反馈。

16 条内容

数据校验和的 TAP 测试暴露崩溃恢复竞态

Tomas Vondrapgsql-hackers 邮件列表

Tomas Vondra 给刚进主干的在线切换数据校验和写了一套 TAP 测试,用大约 80 个注入点检查状态变更与 checkpointer 之间的竞态。状态分散在四处,各由不同的锁保护。测试发现崩溃恢复后的最终状态会在 on 和 off 之间摇摆,取决于启动器写 XLOG2_CHECKSUMS 记录与 checkpointer 读共享内存做 REDO 的先后。他质疑 DELAY_CHKPT_START 是否真能挡住这类竞态。

REPACK 并发版的压力测试仍在报错

Antonin Houskapgsql-hackers 邮件列表

REPACK 的并发执行仍有正确性问题。Mihail Nikalayeu 报告说即使打上针对 SNAPBUILD_CONSISTENT 的最新修复,压力测试照样失败:唯一索引创建时报重复键,pgbench 侧出现除零错误。008 号并发测试被那个修复治好了,007 号仍稳定复现;把 need_shared_catalogs 置为 true 能绕过,说明当前方案有根本缺陷。Antonin Houska 承认要查旧问题。

流复制与 WAL 归档的协调补丁进到第五版

Grigory Smolkinpgsql-hackers 邮件列表

Grigory Smolkin 提交第 5 版补丁,处理流复制与 WAL 归档之间的交互,问题出在管着数千个集群的生产环境里。v5 的主要改动是只传时间线 ID 和段号而不是完整 WAL 文件名,把一部分工作挪到归档进程,并为 walreceiver 与归档进程加共享内存协调。四个设计问题待定:备库要不要更新 pg_stat_archiver、两类 ready 文件怎么处理、切换点计算能否简化、强制归档是否全收进归档进程。

冲突日志表的权限拟授给 pg_create_subscription

Amit Kapilapgsql-hackers 邮件列表

逻辑复制的冲突日志历史表卡在权限上:非超级用户的订阅所有者访问不了 pg_conflict 模式里的冲突日志表,原因是查询分析阶段过早做了 ACL 检查。Dilip Kumar 试过绕开模式检查和干脆取消限制,都不合适;Shveta Malik 提议单给订阅所有者授 USAGE,但订阅所有者本身没有授权的权限。最后 Amit Kapila 提议把该模式的使用权授给 pg_create_subscription 角色,表级操作仍限本人。

故障转移复制槽两年后仍要手动同步

Christophe Pettusthebuild.com

Christophe Pettus 回顾故障转移复制槽的两年。PostgreSQL 17 引入三件套:订阅的 failover 选项、备库的 sync_replication_slots、主库的 synchronized_standby_slots;18 只修缺陷;19 增加动态 wal_level 与 slotsync_skip_reason 列。它保证提升后新主库的槽位不会跑到订阅者前面。但槽位复制是异步的,提升前必须手动核对位置。

把 Postgres 当任务队列的天花板比想象中低

Richard Yenrichyen.com

Richard Yen 讲清了拿 Postgres 做任务队列会撞上什么。高并发下大量工作进程用 SELECT FOR UPDATE SKIP LOCKED,多个事务会短暂引用同一行,产生的 MultiXact ID 堆进固定大小的 SLRU 缓冲区,后端排队在 LWLock:MultiXactSLRU 上,吞吐随之塌陷。任务行反复更新删除,死元组产生得比 autovacuum 回收快,几兆有效数据的队列表能涨到几十 GB。

PgQue 靠两个快照定义批次,代价是秒级延迟

Christophe Pettusthebuild.com

Christophe Pettus 拆解了 PgQue 的做法:消费时完全不改事件表。事件写进轮转的表,事务 ID 作列默认值;一个 ticker 每秒抓一次 pg_snapshot,相邻两个快照之间就是一个批次,消费端据此判断可见性;三张表靠 TRUNCATE 轮转,不做垃圾回收。算法出自 Marko Kreen 2007 年前后的设计。代价是事件要等下一个 tick 才可见,端到端一到两秒。

pgBackRest 归档提出的是治理而非许可证问题

Vibhor Kumarvibhorkumar.wordpress.com

Vibhor Kumar 借 pgBackRest 被原作者 David Steele 归档一事,把开源许可证和运营可持续性分开来谈。项目做了十三年,用的是 MIT 许可证,法律和结构上完全开放,谁都可以分支,但归档意味着它已无人维护。他的看法是一个项目可以在法律上开放、在运营上脆弱。给企业的建议是别只查许可证合规,还要问治理:有没有共享的维护权、透明的决策和可持续的资金。

2 条内容