标签

PostgreSQL

半夜表膨胀四倍:PostgreSQL 逻辑复制遇上 statement_timeout 的灾难现场

来源: postgr.es 46
一次看起来万无一失的 PostgreSQL 迁移,在午夜把人吓醒——源端表安安静静几十 GB,目标端同样几张表却膨胀到 400 GB 以上,还在继续涨。排查到最后,罪魁祸首是一个再正常不过的配置:。两个各自合理的机制撞在一起,就制造了一场无声的灾难。 客户要把一个 PostgreSQL 数据库通过逻辑复制迁移到新服务器。逻辑复制的第一步是初始表拷贝——...

PostgreSQL 的 now() 在事务里是"冻结"的——你踩过这个坑吗?

来源: oschina.net 63
是 PostgreSQL 里最常被随手调用的函数之一,取当前时间、写日志、算过期……几乎无处不在。但如果你在事务里用它,它返回的并不是"此刻",而是事务开始的那一刻。一个跑了两分钟的事务,从头到尾每次 拿到的都是同一个时间戳。这个行为符合 SQL 标准,却和大多数人的直觉相悖,最近 Emmett 库的作者 Marcin 就因此踩了一个实打实的 bug。...

PostgreSQL leakproof 函数:行级安全与性能之间的那条线

来源: postgr.es 60
行级安全(Row-Level Security)是 PostgreSQL 提供给多租户场景的一把利器——在数据库层面直接隔离不同租户的数据,省去应用层反复过滤的麻烦。但很多团队真正用上 RLS 后,第一个撞上的墙不是安全,而是性能。查询慢得离谱,索引仿佛失效,原因指向一个不起眼的函数属性:。Laurenz Albe 的这篇文章把这个问题拆得很透,也提出...

PostgreSQL 三个代价常量:为什么你几乎永远不该改它们

来源: postgr.es 54
PostgreSQL 的查询规划器靠一组常量给每条执行路径"打分",最终选出成本最低的那个方案。其中 、 和 是最常被提及的三个。但最实用的一条建议是——你几乎永远不该修改它们。下面解释原因,以及在真正需要调优时该做什么。 规划器的成本模型把每条路径的代价拆成两部分:I/O 代价(读磁盘页)和 CPU 代价(处理一行、比较一个值)。三个常量负责后者: ...

PostgreSQL 14 的 compute_query_id:统一查询标识背后的性能权衡

来源: postgr.es 64
PostgreSQL 在 14 版本之前,各子系统对"这条查询到底是谁"的回答并不一致。 有自己的计算方式, 有另一套,日志里又是一种——同一个 SQL 在不同地方拿到不同的 ID,关联分析几乎不可能。14 版本用 这个 GUC 把计算逻辑统一到核心层,但默认值是 ,不是 。原因很简单:每次计算都要吃一点 CPU,而 PostgreSQL 的设计哲学是...

PostgreSQL 终于有了开源透明数据加密:pg_tde 实战指南

来源: postgr.es 59
数据库磁盘文件被偷走怎么办?这是很多合规审计场景下的硬问题。MySQL、SQL Server、Oracle 早就有透明数据加密(TDE)方案,而 PostgreSQL 长期以来只能靠文件系统层加密或自编译补丁来凑合——要么不够细粒度,要么维护成本太高。pg_tde 的出现填补了这个空白:它是第一个面向 PostgreSQL 的开源 TDE 扩展,以 e...

PGConf.dev 2026:当贡献者聚在一起,Patch 才真正活起来

来源: postgr.es 58
大多数 PostgreSQL 大会的参会者以用户和 DBA 为主——听演讲、学调优、拿最佳实践回家。PGConf.dev 不一样。它吸引的是贡献者和社区核心成员,这意味着你带着 Patch 去现场,真的有人坐下来帮你 Review。 Robert Haas 负责组织周二的内容,横跨六个 Track。六轨意味着同一时段有六场不同方向的深度分享并行进行——...

PostgreSQL 17:SLRU 缓冲池终于可配置了——从 commit_timestamp_buffers 开始

来源: postgr.es 68
PostgreSQL 内部有一套低调但关键的共享内存结构叫 SLRU(Simple LRU),负责管理事务状态、提交时间戳、子事务等核心元数据。多年来这些缓冲池的大小全部硬编码,遇到高并发或长事务场景只能靠改源码重新编译。PG 17 打破了这一限制——首次把 SLRU 缓冲池大小暴露为 GUC 参数, 就是其中之一。 SLRU 是 PostgreSQL...

PostgreSQL 19 原生支持 REPACK CONCURRENTLY:不再需要 pg_repack 扩展

来源: postgr.es 46
PostgreSQL 的表膨胀(bloat)问题一直让运维人员头疼——频繁的更新和删除留下大量死元组,即使 autovacuum 勤勉工作,表文件本身也不会缩小。要真正回收空间,就得重建整张表。但 会拿 ACCESS EXCLUSIVE 锁,整张表读写全堵;pg_repack 和 pg_squeeze 作为第三方扩展解决了锁的问题,却带来额外的安装和维...

数据湖里的关系问题,一条 Cypher 就能搞定——在 Postgres 里用 Apache AGE 做图查询

来源: postgr.es 62
数据湖让 Postgres 能读 S3 上的 Iceberg、Parquet 文件,聚合分析不再是问题。但一旦问题变成"沿着 referral 链路找到所有从网络内跳到网络外的路径,再算出涉及金额",纯 SQL 就开始力不从心——递归 CTE 写起来冗长,跑起来吃内存。Apache AGE 把 openCypher 图查询直接塞进 Postgres,图...