外键内连接消除遇到触发器造成的间隙
Richard Guo 在 hackers 上指出基于外键的内连接消除存在正确性问题。这项优化假定外键约束始终成立从而重写连接,但父行删除与级联删除并非原子:在语句执行到 AFTER ROW 触发器触发之间,快照可能看到约束被违反,结果就错了。他列出六种处理方向,从放弃优化、加锁谓词到接受一个有文档记录的边缘情况。当前实现的加锁方案过于保守,会在整个事务里禁用优化;补丁将拆成优化机制与间隙处理两部分分别评审。
pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
当天收录 28 条。
Richard Guo 在 hackers 上指出基于外键的内连接消除存在正确性问题。这项优化假定外键约束始终成立从而重写连接,但父行删除与级联删除并非原子:在语句执行到 AFTER ROW 触发器触发之间,快照可能看到约束被违反,结果就错了。他列出六种处理方向,从放弃优化、加锁谓词到接受一个有文档记录的边缘情况。当前实现的加锁方案过于保守,会在整个事务里禁用优化;补丁将拆成优化机制与间隙处理两部分分别评审。
连接统计信息补丁进入 v7 评审。Chengpeng Yan 提了几个设计问题:索引到底是统计定义的持久组成部分还是只在创建时需要,存在等价索引时要不要阻止 DROP INDEX;对被探测关系执行 ANALYZE 不会刷新连接统计,规划器可能同时拿到新鲜的基表统计和过时的跨关系信息。Tomas Vondra 与 Tom Lane 同意第一版只做两表连接,但目录结构要为扩展留余地;表属于不同属主时的权限问题尚未解决。
Christophe Pettus 建议启用 client_connection_check_interval。该参数让后端在执行查询期间轮询客户端套接字,一旦内核报告连接已断就终止查询,不再为已经消失的客户端白耗资源。默认值 0 即关闭,它依赖 POLLRDHUP,在 Linux、macOS 和 BSD 上可用而 Windows 不支持,开销只是一次系统调用。他给的经验值是 OLTP 用 10 秒,分析型长查询可以到 5 秒。
Richard Yen 给出一种把外部数据用于分析的组合:外部表只当接入点,在它上面建物化视图把数据缓存到本地,再给物化视图加索引。他的判断是外部数据包装器优化的是开发体验而不是查询性能,远端延迟和不可靠的下推让性能难以预测。刷新用 REFRESH MATERIALIZED VIEW CONCURRENTLY,前提是有唯一键,代价是接受一段可控的数据陈旧。这样既避开远端系统的索引缺失与 OLTP 争用,也不必另搭一套 ETL。
Postgres Pro 发布 Shardman 18,这是一个把数据水平分布到多个节点的 PostgreSQL 分片扩展。新版本改进了分布式查询的规划与执行,增强监控,并跟进 PostgreSQL 18 的特性。扩展在分片之间自动分布数据,同时保持 ACID 语义和跨分布式表的复杂连接能力。厂商列出的主要改进包括跨分片查询性能优化、集群管理简化和故障转移机制增强,目标是在保留标准 SQL 接口和一致性保证的前提下提供横向扩展。
Slava Sarzhan 给出从 Crunchy Data 算子迁到 Percona 算子的备库方案。Percona 的算子是 Crunchy 的硬分叉,底层仍是 Patroni、pgBackRest 和 PgBouncer,迁移因此相对直接:把 Percona 集群作为现有 Crunchy 主库的备库拉起来,经备份和流复制同步,最后一步才降级旧主、提升新集群,停机很短。文中还给出以 SeaweedFS 作共享存储的配置和回滚流程。
Redis Open Source 8.8 正式发布,是一次功能级更新而不是补丁。新增 Array 数据结构、INCREX、XNACK 和哈希字段级通知,JSON、TimeSeries 与 Search 能力同步扩展,并带来多项性能改进。INCREX 和 XNACK 分别对应应用侧限流与流消费者的重投递恢复。生产用户升级前应验证模块与客户端兼容性、streams 待处理消息语义、限流逻辑以及 Search 和 JSON 的查询行为变化。
一份调查称发现约 900 个可公开读取的 S3 存储桶里存着 Terraform state 文件,其中 41 个含有仍然有效的 AWS 凭证。state 文件通常包含 provider 配置、资源属性、生成的凭证和内部拓扑,公开的 state 桶等于公开一张攻击路线图。这不是新型漏洞,却是云上最常见也最容易避免的问题之一。建议逐一检查各家对象存储后端的公共访问设置、桶策略、KMS 加密与访问日志。
去掉多余的包装函数直接调用 wait_for_catchup(),代价是恢复该特性之前的轮询开销。
审阅者发现回归测试构造表名有误、二进制升级期间转储组件可能被覆盖等问题。
把应用时间列的属性号加进 updatedCols,同时解决生成列依赖与 UPDATE OF 触发器。
改提两个轻量替代:文档首页标注发布年份与 EOL,宣传材料写成 PostgreSQL 19 (2026)。
发布时间早于本窗口,延迟敏感的缓存与队列场景值得单独验证 rehash 行为。
涉及 REST catalog、Spark 与 Flink 集成、规范更新和 manifest 加密等大量变更。
多个 feature gate 稳定化会切换默认行为,另修复 Snappy 路径的内存破坏,升级前先读变更日志。
开发机上的 SSH 密钥、云令牌和仓库令牌是高价值目标,值得收紧本地凭证隔离。
攻击成本也由托管、域名、支付和滥用处理链路决定,托管方的响应流程同样关键。
把 policy-as-code 从准入控制器前移到 PR、CI、镜像构建和模板渲染阶段。
迁移前要做路由清点、影子流量、灰度、指标对齐和回滚方案,注解与自定义片段是难点。