谷歌云投资 PostgreSQL 的未来 — 2026 年度亮点

由 John Doe 十月 9, 2026

谷歌云始终坚定投身开源事业,而 PostgreSQL 是 Cloud SQL、AlloyDB 等全线托管数据库产品的核心基石。

目录

image

作者:Dilip Kumar | Google Cloud SQL for PostgreSQL 团队

在持续深度参与 PostgreSQL 社区的过程中,我们持续向上游内核贡献代码、参与补丁评审流程。下文总结了 2026 年 1 月至 9 月期间的技术工作,重点展示了我们为提升上游项目及整个生态的性能、稳定性与韧性所做的努力。通过强化这些核心能力,我们希望推动技术创新,惠及全球 PostgreSQL 生态及其广大用户。

本阶段我们的技术贡献主要聚焦于四大方向:提升内核引擎性能、新增逻辑复制特性、修复关键缺陷、增强升级过程的稳定性。同时我们也持续投入 PostgreSQL 生态建设,修复了多款主流扩展中的问题。


技术贡献总览:2026 年 1 月 — 9 月

本轮贡献覆盖四大核心领域:

  1. 逻辑复制与冲突管理:为双活复制、增强型冲突日志、系统目录安全性奠定基础架构。
  2. 内核引擎性能与可靠性:消除顺序扫描中元组级别的冗余开销,让备库提升的超时控制更精准。
  3. 内核目录、排序规则与索引缺陷修复:强化权限一致性、可延迟索引构建、排序规则处理与内存安全性。
  4. PostgreSQL 扩展与生态加固:修复主流生态扩展(plpgsql_check、pgfincore、pgtt)中的严重崩溃、锁段注册与内存安全问题。

一、逻辑复制与冲突管理

逻辑复制是实现近零停机迁移、大版本升级与跨区域数据分发的核心能力。我们近期的工作聚焦于冲突日志表基础架构、命名空间规范性与跨库目录完整性。

1. 支持将逻辑复制冲突记录到数据表

背景与挑战:迈向多主双活复制的关键里程碑,是能够自动记录并解决节点间的数据不一致。在结构化冲突日志出现之前,追踪写入冲突只能人工排查服务器日志,或依赖自定义的应用层处理程序,难以查询、分析,也无法对接外部监控与自动化系统。 解决方案:该补丁在 CREATE SUBSCRIPTION 和 ALTER SUBSCRIPTION 中新增了 conflict_log_destination 选项,用于控制冲突记录的输出位置,支持取值为 log(原有行为)、table 或 all。 启用表级日志后,系统会在专用的 pg_conflict 命名空间下自动创建内部日志表 pg_conflict_log_<订阅ID>。独立命名空间避免了与用户表名冲突,同时保护该表不被直接修改。日志表与订阅通过内部依赖绑定,订阅删除时表会自动清理。 冲突详情(包括本地与远端元组)以 JSON 列存储,因此单张表结构可兼容不同 Schema 的表;同时记录表本地 / 远端事务 ID、LSN、提交时间戳与冲突类型,为事后排查提供完整依据。

注:如无阻塞性问题,该功能计划纳入 PostgreSQL 20 版本。 贡献者:迪利普・库马尔(第一作者)

2. 修复跨数据库场景下订阅的 REASSIGN OWNED 问题

背景与挑战:pg_subscription 在物理上是共享系统目录,以便后台启动进程可以扫描所有数据库;但在逻辑上,订阅对象是每个数据库本地的。REASSIGN OWNED 等操作未将目录扫描限定在当前数据库(MyDatabaseId),可能导致跨数据库边界的意外修改。 解决方案:为 pg_subscription 的读取逻辑新增了显式校验,确保非启动进程严格按照当前数据库 ID 过滤结果,保障跨数据库隔离性,并同步更新了相关文档。

贡献者:迪利普・库马尔(作者)

3. EXCEPT 子句错误信息使用带模式限定的表名

背景与挑战:当发布包含 EXCEPT 子句的表时,如果某个关系无法处理,check_publication_add_relation() 之前仅返回未限定模式的表名,在多模式数据库中会造成错误信息歧义。 解决方案:更新了错误上报逻辑,输出完整的带模式限定的关系名,与 PostgreSQL 整体的错误信息规范保持一致。

贡献者:迪利普・库马尔(作者)


二、内核引擎性能与管理功能增强

优化吞吐能力、提升管理操作的可预测性,始终是数据库负载的核心优化方向。

1. 改进 pg_promote 的超时处理逻辑

背景与挑战:通过 pg_promote() 进行备库提升时,用户可以指定超时时长。但由于等待循环中的耗时追踪不精确,提升操作可能在配置的超时时间到达前就提前终止,并返回提升未完成的结果,与用户预期不符。 解决方案:优化了提升循环逻辑,预先计算预期结束时间戳,并在循环中追踪实际耗时,确保严格遵循用户配置的等待时长。

贡献者:Robert Pang(发现者兼作者)

2. 表扫描仅执行一次 CheckXidAlive 校验

背景与挑战:此前,CheckXidAlive 校验是在 table_scan_next 内层循环中执行的,导致顺序扫描时每获取一条元组都要重复执行校验,产生不必要的性能开销。 解决方案:重构了扫描控制流程,将校验上移至 table_beginscan 阶段,每次扫描仅执行一次,而非逐行执行,简化了执行路径,在大表顺序扫描场景下带来了可量化的吞吐提升。

贡献者:迪利普・库马尔(作者)


三、内核访问控制、排序规则与索引缺陷修复

我们持续加固 PostgreSQL 内核,解决系统目录不一致、段错误、边界查询异常等问题。

1. 允许 pg_read_all_data /pg_write_all_data 访问大对象

问题:pg_read_all_data 和 pg_write_all_data 默认角色的设计初衷,是让 pg_dump 等运维工具无需超级用户权限即可运行。但在这些角色下,大对象(LOB)仍无法访问,必须单独授予对象级权限。 修复:更新了权限校验逻辑,将 pg_read_all_data 和 pg_write_all_data 的权限范围扩展至大对象,完整实现了无需超级用户即可完成备份与运维流程。

贡献者:Nitin Motiani(作者)、迪利普・库马尔(评审)

2. 修复 index_create_copy 中延迟标志传递问题

问题:对可延迟唯一约束执行 REINDEX CONCURRENTLY(并发重建索引)时,index_create_copy() 会将约束标志默认设为 0,导致 indimmediate 属性被设为 true。这会让并发事务立即触发约束校验,而非延迟到事务提交时,可能引发意外的约束违反。 修复:新增 INDEX_CREATE_DEFERRABLE 标志,可正确将 indimmediate=false 属性传递给临时复制索引,同时不破坏内部约束校验的严格性。

贡献者:Nitin Motiani(作者)

3. 修复非确定性排序规则下 LIKE 与反斜杠的匹配问题

问题:在为 LIKE 操作符新增非确定性排序规则支持后,字面模式子串解析会无条件跳过所有反斜杠字符。当遇到转义反斜杠 \\ 时,引擎会直接省略第二个反斜杠,而非输出一个字面的 \。 修复:修正了模式转义逻辑,在求值过程中可以正确识别并输出转义后的反斜杠。

贡献者:Nitin Motiani(作者)

4. 修复 DSM 段释放锁导致的段错误

问题:如果后端进程在事务外持有动态共享内存(DSM)段中的锁(例如动态共享哈希表 dshash 中的锁)时发生致命错误(FATAL)退出,进程终止阶段释放锁可能会引用已被解绑的 DSM 段,触发段错误。 修复:加固了致命退出时的清理与锁释放顺序,在执行任何回调前先释放所有锁,确保内存段安全解绑,不会引发段错误。

贡献者:迪利普・库马尔(评审)


四、PostgreSQL 生态与扩展加固

企业级 PostgreSQL 架构高度依赖第三方扩展。我们团队积极向上游关键生态项目贡献缺陷修复与稳定性改进。

1. plpgsql_check:修复 PG14 下 LWLock 段注册问题

问题:在 PostgreSQL 14 及更早版本中,通过 shared_preload_libraries 加载 plpgsql_check 时,可能因 LWLock 命名段注册缺失或过时,导致共享内存锁错误,加载失败。 修复:将 PG15 之前版本的锁段初始化逻辑对齐为现代的 shmem_request_hook 模式,确保在旧版本服务器上也能安全分配共享内存。

贡献者:Aniket Jha(作者)

2. pgfincore:修复数组越界与内存未初始化问题

问题:pgfincore 存在两处隐蔽的内存安全问题:缓冲区检查时的数组越界访问(off-by-one),以及内存释放时的未初始化值引用。 修复:提交补丁增加了严格的边界检查与指针重置逻辑,消除了操作系统缓冲区缓存分析过程中的潜在内存损坏风险。

贡献者:Robert Pang(作者)

3. pgtt:基于解析树私有副本运行,避免释放后使用崩溃

问题:通过扩展查询协议执行工具命令,或在缓存上下文(如 PL/pgSQL 与 SQL 函数)中运行时,pgtt 会使用短期查询内存直接修改缓存的语句解析树。一旦该内存被释放,后续执行缓存执行计划就会引发 “释放后使用”(Use-After-Free)崩溃。 修复:更新了该扩展,对缓存且只读的语句使用独立的解析树深拷贝进行操作,确保多次执行时的内存安全。

贡献者:Sunaina Punyani(作者)


社区路线图:你的反馈至关重要

我们欢迎大家在评论区提出希望未来版本新增的能力或改进建议,也欢迎指出 PostgreSQL 开源社区应重点投入的关键方向。

致谢

感谢我们的工程师团队持续为开源事业奉献:

  • 迪利普・库马尔(PostgreSQL 社区贡献者):主导并评审核心复制、系统目录、内存与性能相关补丁。
  • Nitin Motiani:主导核心权限扩展、排序规则转义、索引约束修复等工作。
  • Robert Pang:主导备库提升计时修复与 pgfincore 内存安全加固。
  • Aniket Jha:加固 plpgsql_check 的共享内存锁机制。
  • Sunaina Punyani:解决 pgtt 中的内存与执行安全问题。

同时,我们也向广大 PostgreSQL 开源社区致以诚挚谢意 —— 尤其是各位提交者、评审者与扩展维护者 —— 感谢大家的协作评审,以及共同守护 PostgreSQL 作为全球最先进开源数据库的承诺。

参考

Google Open Source Blog: Google Cloud: Investing in the future of PostgreSQL — 2026 highlights