PostgreSQL 19 补上升级流程里的序列同步缺口
用 pg_createsubscriber 做在线升级时,表数据靠逻辑复制同步,序列取值却还是旧的,切换后很容易撞上重复键错误。PostgreSQL 19 把序列同步做进核心:序列可随表一起发布,由专门的同步 worker 把发布端状态复制到订阅端。发布时写 FOR ALL SEQUENCES, ALL TABLES,切换前再对订阅执行 REFRESH SEQUENCES。目前仍要显式加入发布并手动刷新。
pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
当天收录 32 条。
用 pg_createsubscriber 做在线升级时,表数据靠逻辑复制同步,序列取值却还是旧的,切换后很容易撞上重复键错误。PostgreSQL 19 把序列同步做进核心:序列可随表一起发布,由专门的同步 worker 把发布端状态复制到订阅端。发布时写 FOR ALL SEQUENCES, ALL TABLES,切换前再对订阅执行 REFRESH SEQUENCES。目前仍要显式加入发布并手动刷新。
Peter Eisentraut 报告了 6 月的斯德哥尔摩 SQL 与 GQL 标准会议。工作草案新接受四项提案:QUALIFY 在窗口函数之后过滤,INSERT BY NAME 按列名匹配,SELECT 列表的 EXCLUDE 去掉指定列,JOIN TO ONE 在运行时校验连接基数。PostgreSQL 这边 QUALIFY 在 19 周期暂停,预计 20 继续,EXCLUDE 已有部分实现。新标准计划 2027 年年中发布。
Laurenz Albe 说明了表太多的代价:一个后端访问过两万张表之后,relcache 与 catcache 从 4.1 MB 涨到 221 MB,pg_attribute 里堆了 94 万行。连带问题包括 autovacuum worker 起不来、pg_upgrade 从几分钟变成几天。这些缓存只增不减,他建议从设计上减少表数量,用规模适中的连接池,并在 v14 以上用 idle_session_timeout 清掉空闲会话。
Gulçin Yildirim 演示了用原生特性表达时态语义。PostgreSQL 18 起可以用 WITHOUT OVERLAPS 写出核心规则:同一业务键的有效期不能重叠,形如 PRIMARY KEY (id, valid_at WITHOUT OVERLAPS),重叠的会被直接拒绝。配合范围类型、带 PERIOD 的时态外键和 btree_gist,应用时间这一侧已经相当完整。系统时间的自动版本化和时间旅行查询还得靠触发器或扩展。
Percona Operator for PostgreSQL 引入 Community PostgreSQL Images:允许直接用 PGDG 官方软件包构建容器镜像,绕开厂商控制的镜像仓库,用户可用官方 Dockerfile 自行构建托管。它在 3.0.0 是技术预览,3.1.0 起正式支持,镜像内置 pgvector、pgaudit、pg_cron 等扩展。Percona 发行版的专有能力如透明加密 TDE 不在其中。
GitHub Security Lab 介绍了 Advisory Database 在漏洞数量创纪录时的内部处理方式和压力所在。对企业来说,真正决定修补效率的不是某一条 CVE,而是漏洞信息是否可信、及时、能被工具直接消费。维护开源包或内部发行流程的团队,除了确认扫描器有没有打开,更该关注公告的接入质量、误报的处理办法和依赖更新的节奏。
Chao Li 指出重写阶段只加载 UPDATE/DELETE 策略,于是可以靠更新子范围绕过 INSERT 策略。
标准明确展开时跳过窗口函数,与 PostgreSQL 现有行为一致,补丁同步更新了注释与文档。
与 TOAST 压缩的近期变更保持一致,多人赞成并建议放进 PG19,避免分两个版本切换默认值。
Fujii Masao 的评审指出文档遗漏、pg_upgrade 比较值写错,以及若干 pre-v10 的残留代码路径。
v8 补丁统一改用 try_table_open,评审建议把回归测试从 TAP 改成隔离测试。
v02 补丁系列 245 个回归测试全过,竞态对时序高度敏感,测试者未能复现原始问题。
回移到 18 和 17 需要微调测试;RangeVar 不该带 relpersistence 的重构问题仍待处理。
高噪声仓库可以启用,但要配套 discussion、安全公告或模板化渠道,别切断有效的缺陷报告。