↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

PostgreSQL 博览 RSS 订阅

每日精选 PostgreSQL、数据库与云计算资讯

21 条

GIN VACUUM 可能把内部页当叶子页,造成索引损坏

Peter GeogheganPostgreSQL hackers

Peter Geoghegan 报告了一个影响所有稳定分支的 GIN 索引损坏:ginVacuumPostingTreeLeaves() 把共享锁升级为排他锁后没有重新检查页面是否仍是叶子页,VACUUM 可能把内部页当叶子页处理,漏掉该清除的死 TID。Andrey Borodin 确认这是真实的数据损坏,追溯到 fd83c83d0。另一个缺陷是 ginInsertCleanup 只在 ginbulkdelete 的第一遍被调用。

并发分离分区未完成会引发崩溃,补丁将回移

Mihail NikalayeuPostgreSQL hackers

DETACH PARTITION ... CONCURRENTLY 的等待阶段一旦被中断,分区的 in-detach 标记只有 FINALIZE 能清除,于是 relispartition 仍为真,而 get_partition_ancestors() 返回空列表。Mihail Nikalayeu 压测时发现三处代码都假设祖先列表非空,会触发断言失败或空指针解引用。Álvaro Herrera 计划下周推入并回移。

实测 AlloyDB:协议之下是另一个数据库

Radim Marekboringsql.com

Radim Marek 实测后认为 AlloyDB 的兼容只到线协议这一层:日志即数据库,数据页由 WAL 异步派生;所谓自适应 autovacuum 只换了调度器,清理仍在计算节点上做。列存引擎把 TPC-H Q6 从 2681 毫秒降到 69 毫秒,但 SF100 下写争用从 16% 升到 29%,列存还可能因缺少查询历史而静默为空。扩展支持也割裂:plv8 只在 Omni,PostGIS 只在托管版。

jit 写在配置里只是意图,未必真的在编译

Christophe Pettusthebuild.com

jit 默认开启,代价超过阈值时用 LLVM 把表达式求值和元组解构编译成机器码,长时间的分析型查询受益,短查询只白付编译开销。真正的坑是 llvmjit 常被单独打包,容器镜像用 --no-install-recommends 时装不上,此时 PostgreSQL 静默地不做 JIT,既不报错也不写日志。Christophe Pettus 建议每台机器都跑一次 pg_jit_available() 确认。

执行器批处理设计倾向复用 slot 而非新增回调

Denis SmirnovPostgreSQL hackers

Denis Smirnov 主张不新增 table AM 回调,把 tts_batch 同时用于堆表和列存:堆表保留 Datum 数组,列存保留 Arrow 数组或压缩列,只有普通节点索要行数据时才转换。新增 TupleBatchRequest 描述属性集,TupleTableSlotBatch 带 selection 位图;支持批处理的节点在 ExecProcNode() 返回后检查 tts_batch 决定走哪条路径。

逻辑复制单表重同步补丁修掉继承表数据丢失

Cagri BirogluPostgreSQL hackers

Cagri Biroglu 的按表重新同步补丁更新到 v4,为逻辑复制提供 ALTER SUBSCRIPTION ... REFRESH TABLE。这一版把 ExecuteTruncate() 换成基于已解析 OID 的 ExecuteTruncateGuts(),修掉继承子表被静默 TRUNCATE 导致数据丢失的缺陷,并拒绝对被其他订阅追踪的关系执行 truncate。文档和 psql 补全一并补上。

18 条

io_method 与 io_workers 决定谁来执行 I/O

Christophe Pettusthebuild.com

PostgreSQL 18 的异步 I/O 落地后,由谁执行 I/O 取决于 io_method 和 io_workers。sync 退回同步行为,只用于排查;默认的 worker 走后台进程池;io_uring 交给 Linux 内核最快,但需要 liburing 构建与放行的安全策略,容器里常被禁止,此时服务器会直接启动失败。io_workers 默认 3、上限 32,可在线调整,冷读负载建议提到 CPU 线程数的四分之一到一半。

querymem 扩展在执行前估算查询内存上限

Shaun ThomaspgEdge 博客

work_mem 按操作而非按查询生效,一条语句里的多个排序、哈希节点各占一份,哈希节点还要乘 hash_mem_multiplier,预估总量没有趁手工具。作者用 raw_parser() 解析、planner() 生成计划,再遍历计划树累加倍率乘上 work_mem 得到最坏情况,做成扩展 querymem 挂在 ExecutorStart 钩子上,可记日志或拒绝超限查询。在 pgbench 上,含两个哈希的连接估到 28 MB。

连续聚合的迟到数据可能永远不会被重算

Damaso SanojaTigerData 博客

TimescaleDB 的连续聚合靠 invalidation 日志和定时刷新保持同步,start_offset 是回溯窗口,end_offset 是新鲜度下限。Damaso Sanoja 指出一个容易忽略的坑:迟到写入若落在已物化且超出回溯窗口的 bucket 上就永远不会重算,聚合结果静默保持错误值,而 real-time aggregation 只覆盖 watermark 之后尚未物化的部分,救不了这种情况。

分区合并拆分静默丢弃 RLS,pg19 先改为报错

Alexander KorotkovPostgreSQL hackers

PostgreSQL 19 计划引入的 MERGE/SPLIT PARTITIONS 在合并拆分时会静默丢弃分区级属性,包括 RLS 策略、ACL、索引等。多位审阅者认为静默丢弃 RLS 是安全隐患,文档也只用「等等」一笔带过。Alexander Korotkov 提议 pg19 先对涉及 RLS 的操作直接报错,完整支持推迟到 pg20,实现该检查的补丁已经提交。

WAL 压缩补丁到 v9,wal_compression 默认选 zstd

Andrey BorodinPostgreSQL hackers

Andrey Borodin 的 WAL 压缩补丁系列更新到 v9:复用 zstd 上下文加快压缩解压、在按 FPI 压缩之外增加整条记录压缩,跨记录流式压缩仍在开发。审阅者指出 v8 与新提交冲突。v9 完成变基,修掉 EXEC_BACKEND 下 XLOGShmemAttach() 的 Windows bug,文档同步注明 wal_compression = on 默认优先选用 zstd。

26 条

PostgreSQL 全系小版本与 19 Beta 3 发布

PostgreSQL 全球开发组PostgreSQL 新闻

PostgreSQL 全球开发组发布了所有受支持版本的更新,包括 18.6、17.11、16.15、15.19、14.24,以及 19 的第三个 Beta。本次修掉 28 个安全漏洞和过去数月报告的一百一十多个缺陷。18.4 到 18.6 之间跳过了 18.5,原因是回归问题。三类情况升级后可能还要额外处理:并行 GIN 索引构建、btree_gist 与 ltree。另外 PostgreSQL 14 将在 2026 年 11 月 12 日停止接收修复。

高基数负载会把 pg_stat_statements 挤爆

Ryan Boozpganalyze 博客

Ryan Booz 这一篇讲怎么识别高基数负载,也就是持续产生的唯一归一化查询数超过 pg_stat_statements.max,导致统计被挤掉。常见来源是 ORM、动态 SQL、临时报表和 AI 辅助开发工具。文中用 Bluebox 造压:同一负载在 PostgreSQL 17 上产生 671 条唯一语句,在 18 上只有 120 条,差别来自 IN 列表归一化的改进。诊断方法是重置后观察填充速度,并盯住释放计数。

pg_walviz 把 WAL 段画出来看

Bertrand Drouvot作者博客

Bertrand Drouvot 发布了 pg_walviz,一个把 WAL 段文件的物理布局画到浏览器里的只读工具。它启动一个本地 HTTP 服务,四个联动视图分别显示按资源管理器活动着色的段热力图、选中页上的记录片段、解码后的记录头,以及按组成部分着色的原始字节。它补的是 pg_waldump 纯文本看不清的那部分。使用前提是只对归档或不可变的段副本操作,并配同版本的 pg_waldump。

io_max_concurrency 是每个进程的硬上限

Christophe Pettusthebuild.com

Christophe Pettus 讲 io_max_concurrency:它规定单个进程同时能有多少个 IO 在途,是对 effective_io_concurrency 请求量的封顶。这个参数由 PostgreSQL 18 的异步 IO 子系统引入,默认 -1 表示启动时自动算,属于 postmaster 级别,改动要重启。前者最高能要到 1000,但单进程实际发出多少受这个上限约束。作者建议保持 -1,先用 pg_aios 核实真实并发。

Fastware 梳理 PostgreSQL 数据脱敏的落地难点

Diksha SharmaFujitsu Enterprise Postgres

Diksha Sharma 从数据库管理员的实际处境出发,梳理 PostgreSQL 里做数据脱敏会遇到什么。难点有三类:要覆盖各式各样的数据类型,要能施加临时性的脱敏控制,还要把基于角色的脱敏策略做成可长期维护的东西而不是一次性脚本。文章的落点是在数据保护和业务可用之间找平衡,让需要用数据的团队照常工作,同时不让原始敏感值流出去。对准备把脱敏规范化的团队来说,它更像一份问题清单而不是具体实现方案。

Tailscale 把一次数据损坏追到 SQLite 缺陷

TailscaleTailscale 博客

Tailscale 公布了一次生产数据库损坏的排查结果,根因是 SQLite 的 WAL 重置竞态。官方说明触发条件相当苛刻:必须是 WAL 模式,同一文件至少有两个独立线程或进程连接,并在极窄的时刻并发写入和检查点。修复进入 3.51.3 及之后的版本,也回补到了 3.44.6 与 3.50.7。这属于数据损坏而不是一般可用性缺陷,受影响的版本跨度约十六年。合适的做法是先生成运行时版本清单,筛出 WAL 加多连接的部署,做备份恢复演练再升级。

32 条

plx 让你用熟悉的语言写 PostgreSQL 函数

Command Prompt, Inc项目仓库

Command Prompt 发布扩展 plx,允许用熟悉的语言方言编写存储函数和触发器。执行 CREATE FUNCTION 时,plx 把函数体翻译成 PL/pgSQL 存进 pg_proc.prosrc,运行时仍由自带的解释器执行,后端不会加载额外的语言运行时。可用方言包括 Ruby、PHP、JavaScript、Python、Oracle PL/SQL 和 Go,名称都带 plx 前缀,可与原生的 PL/Ruby 共存。它只改写法,不改数据库实际执行的内容。

Dasha 是无代理的 PostgreSQL 性能仪表盘

Dmitry Bulashev项目仓库

Dasha 是一个开源性能仪表盘,用只读角色连接数据库,主机上不装代理也不需要额外扩展。一个实例可以服务多个集群和它们的副本:因为多数统计是实例级且不会复制,它会分别读取每台主机再合并分析,比如主库上看着没人用的索引,可能正扛着备库的全部读负载。功能包括按八类指标算健康分、分析高频查询、对比 pg_stat_statements 快照、检查索引膨胀、查看锁树与等待事件。要求 PostgreSQL 14 以上。

SynchDB 1.4 支持 Oracle 容器数据库

Hornetlabs Technology项目仓库

Hornetlabs 发布 SynchDB 1.4,这个扩展负责把异构源库实时复制到 PostgreSQL 或 IvorySQL。新版把 Oracle 容器数据库支持扩展到全部三条路径:内嵌 Debezium 引擎做变更捕获、oracle_fdw 做初始快照、Openlog Replicator 做基于日志的复制。建连接器时按 CDB/PDB 格式写源库名,SynchDB 会自动连到对应的 PDB 服务,该路径已在 Oracle 23ai 上测试。初始快照现在也能走加密连接。

CYBERTEC 发布自家的 Kubernetes Operator

Hans-Jürgen SchönigCYBERTEC

CYBERTEC 开源了 CYBERTEC PG Operator。在 CloudNativePG、Zalando postgres-operator、Crunchy PGO 和 StackGres 都已成熟的情况下,他们做新 operator 的核心动机是支持多站点部署。除了标准的生命周期管理,它重点实现多站点集群:跨站点复制、自动故障转移,以及在多个 Kubernetes 环境之间验证过的部署模型。源码已放在 GitHub 上。

跨大版本升级 Aurora 时保住 Debezium 连接器

Arko DuttaAWS 数据库博客

Arko Dutta 给出一种在 Amazon Aurora PostgreSQL 跨大版本升级时让 Debezium 连接器继续跑的做法,避免全量重新快照。思路是用原生逻辑复制在源集群和目标集群之间搭一座同步桥。切换时先停掉订阅,手工同步序列值,在目标集群上建新的复制槽,再把连接器指向目标集群并设 snapshot.mode=never。因为保持同一个 topic 前缀,消费者只会看到短暂中断,文中测试切换耗时约 2 秒。

Neon Functions 把后端逻辑搬到数据旁边

Carlota SotoNeon 博客

Neon 推出 Neon Functions,一个基于 Node.js 24 的计算层,可以直接部署到 Neon 分支上,与 Lakebase Postgres 数据库跑在同一区域,DATABASE_URL 会自动注入。这个运行时支持长连接,智能体可以连续流式输出数分钟,WebSocket 或服务端推送连接也能在传输期间保持打开。设计意图是让后端逻辑和数据库在物理上足够近,从而降低数据密集型负载的延迟。

两个 IO 合并参数要一起调才有效

Christophe Pettusthebuild.com

Christophe Pettus 讲 io_combine_limit 与 io_max_combine_limit:前者是 PostgreSQL 17 引入的会话级参数,默认 128kB,把相邻块合并成一次读以减少系统调用;后者是 18 新增的 postmaster 级参数,同样默认 128kB,改动需要重启,它决定异步 IO 子系统在启动时预留多少共享内存。实际生效的是两者中较小的那个,而 SHOW 显示的是你设的值不是实际值,只抬高一个会被悄悄截断。

两千五百万字符串测出排序规则的变动地图

Jeremy Schneiderardentperf.com

Jeremy Schneider 一篇里讲了三件事。检查点上他仍不建议把 checkpoint_timeout 从五分钟往上调,理由是高可用副本救不了:主库重启后副本的恢复时间一样长。排序规则方面,他用 Docker 重做了两千五百万字符串的排序折磨测试,做成彩色网格:glibc 2.28 起多数语言的排序慢到两小时,德语和俄语的顺序在 Debian 12 与 RHEL 9 变过,日语一直稳定,ICU 每个版本都变。

26 条

Electric 团队并入 Databricks 旗下的 Neon

Nikita ShamgunovNeon 博客

Databricks 收购 Electric 团队之后,Electric 将作为 Neon 的一部分并入。Electric 是 PGlite 与 Electric 同步引擎背后的团队:前者是基于 WebAssembly 的轻量 Postgres 运行时,可以直接在浏览器里跑;后者做的是实时数据同步。整合之后,Neon 的 serverless Postgres 平台会获得浏览器内执行与实时同步这两块能力。做本地优先应用的团队值得关注 PGlite 的许可与发布节奏是否照旧。

Crunchy PGO 的跨地域灾备与回切实操

Wellingtone LuvongaCYBERTEC

Wellingtone Luvonga 记录了在 Kubernetes 上用 Crunchy PGO 做 PostgreSQL 跨区域灾备的完整流程,WAL 归档后端选用 MinIO。文章解决了三个难点:用 NGINX 反向代理给 pgBackRest 提供自签名 TLS、避免回切过程中 operator 死锁,以及处理时间线分裂造成的归档污染。步骤覆盖初始部署、复制验证、模拟区域故障切换,以及灾备站点提升为主库后如何把原主区域重建成备库。

在 RDS 与 Aurora 上强制 TLS 并管好证书轮换

Stefano D'AlessioAWS 数据库博客

Stefano D'Alessio 给出 Amazon RDS 与 Aurora PostgreSQL 的 TLS 做法。服务端把 rds.force_ssl 设为 1 拒绝明文连接,客户端用 sslmode=verify-full 校验服务端身份,证书颁发机构在三个可选 CA 里按需求选。文章还给了一套用 CDK 部署的监控:Lambda 配合 EventBridge 与 CloudWatch,提前 30 天发现将过期的证书。有无未加密连接查 pg_stat_ssl。

用 pgcrypto 做多租户自带密钥加密

Tudor GolubencoXata 博客

Tudor Golubenco 演示了让每个租户用自己的密钥加密敏感列的做法。数据密钥存在 AWS KMS 里,应用在查询时取出并作为绑定参数传给 pgp_sym_encrypt 与 pgp_sym_decrypt,数据库本身不持有密钥。组织表用 kms_key_arn 标记是否启用自带密钥。文中点了几个坑:把 log_parameter_max_length 设为 0 以免密钥进慢查询日志、按行而不是按组织记录加密状态、密钥轮换后老行需要迁移。

Dimitri Fontaine 发布 SQL 格式化工具 sqlfmt

Dimitri Fontaine作者博客

sqlfmt 是一个 gofmt 风格的 SQL 格式化工具:只有一种排版风格,没有任何配置开关。它采用的是把子句关键字右对齐到同一列的河流式排版。实现上用 Go 写成,走词法分析而不是抽象语法树,因此能处理粘贴进来的片段、不完整语句甚至不完全合法的语法;测试套件则拿 PostgreSQL 自己的解析器做校验。安装用 go install,作者还编译了一个 WebAssembly 版本放在网页上,不装东西也能直接格式化。

IntervalStyle 会同时改变输出与解析

Christophe Pettusthebuild.com

Christophe Pettus 提醒 IntervalStyle 不只管间隔值怎么打印,也管怎么解析输入。同一个间隔在 postgres 下是 1 year 2 mons 3 days 04:05:06,在 sql_standard 下是 +1-2 +3 +4:05:06,在 iso_8601 下是 P1Y2M3DT4H5M6S。风险有三处:sql_standard 会改变负号字面量的含义,iso_8601 对混合符号的间隔输出严格解析器读不了的写法,全局改动会打乱驱动。

研究挑战固件 SMM 同步进入的前提

xoreaxeaxeax研究代码仓库

研究者公开了针对系统管理模式集合超时假设的代码与验证方法。作者称在一台 Zen 3 的 Ryzen 7 5800H 上,用一条从特定慢速 MMIO 地址发起的向量加载可以持续约一秒,跨过固件的集合超时,使某个核心仍在 SMM 之外运行。项目也说明默认地址与参数并不通用,换机器要重新调校,目前没有已协调披露的通用编号。它的意义不是普通用户能拿到 SMM,而是动摇了一个核心进入 SMM 后其他核心都会停下的同步前提。

28 条

PostGIS 3.7.0beta2 发布

Regina ObePostGIS

PostGIS 发布 3.7.0beta2,官方建议搭配 PostgreSQL 19 Beta2 与 GEOS 3.15.0beta2,支持范围是 PostgreSQL 14 到 19beta2、GEOS 3.10 以上、Proj 6.1 以上。这一版在 beta1 基础上修了 ST_GeometryN 与 ST_DWithin 的内存泄漏,加固了可写模式下攻击者可控的对象解析,补上畸形几何的校验,并修正大端平台与 32 位整数处理。

选分区键要先看查询而不是先看数据量

Umair ShahidStormatics

Umair Shahid 提醒,分区之所以快靠的是分区裁剪,而裁剪只在查询按分区键过滤时才生效。他给的方法是先把最频繁、最贵的十条查询列出来,看它们的 WHERE 条件;如果过滤列五花八门,分区不会带来均匀收益。其次要看数据分布,不只是不同值的个数,还要看行怎么落在这些值上。哈希分区适合 UUID 一类天然均匀的键,按租户 ID 做哈希会造成热点。时间序按范围分区最合适,还能靠删分区做数据保留。

integer_datetimes 只剩下一个取值

Christophe Pettusthebuild.com

Christophe Pettus 讲的这个参数只读,报告的是日期时间类型的内部表示:以微秒计的 64 位整数,还是以秒计的浮点数。PostgreSQL 早期用双精度浮点存时间戳,整数表示在 7.x 时代作为编译选项出现,8.4 起成为默认,到 10 时移除了关闭它的编译开关,此后恒为 on。它还留在启动信息里,是因为支持二进制协议的驱动要靠它解码时间戳。8.4 之前用浮点构建的老集群无法用 pg_upgrade 升级。

Restoredrill 想把备份验证做成日常演练

Ahmad Piran项目仓库

Restoredrill 把自己定位成证明 PostgreSQL 备份确实能恢复的工具。仓库在本窗口仍然很新,从项目说明推不出它已经覆盖复杂拓扑、加密、归档、时间点恢复或云备份插件。备份最常见的失败并不是没有备份,而是真要恢复时才发现对象不全、密钥不可用、版本不兼容、时间线缺失或恢复时间不达标。它更适合作为恢复演练清单的输入:先准备独立的恢复目标,做抽样与全量恢复,校验数据、对象与权限,给恢复时间计时,并把结果与生产严格隔离。

Apple 私有云计算漏洞细节公开

Sentry SecuritySentry Security 博客

研究者披露了 Apple Private Cloud Compute 的 CVE-2026-20685 细节:在 Apple 提供的虚拟研究环境里,利用 darwin-init 的解压路径处理,让构造的归档以 root 身份写入持久数据卷,并借此影响日志转发。NVD 记录把影响描述为具备特权网络位置的攻击者可能泄露敏感信息,修复版本是 PCC Release 5E290.3,并非新披露的零日。即使可验证的系统镜像不变,运行时的可写状态仍是独立边界。

11 条

PDU 作者谈 PostgreSQL 非常规恢复的四个阶段

张晨作者博客

新晋 PostgreSQL ACE 张晨解释他为什么把自己定位成数据库恢复专家。他做的是常规工具之外的非常规恢复,自研工具 PDU 走过四个阶段:离线抽取数据、从 WAL 里挖数据、碎片扫描恢复,以及不依赖数据字典的恢复,前两项已开源,后两项作为商业能力保留。他认为 Oracle 与 MySQL 的恢复服务早已成行,PostgreSQL 这块却少有人认真做。他的方法是从事故现场出发,先判断还剩多少数据、值不值得恢复。

Fastmail 开出欧盟数据区域

FastmailFastmail 博客

Fastmail 宣布提供欧盟数据区域,把邮箱数据存放在欧洲。围绕这条公告的讨论把数据所在地与司法辖区、公司控制权、密钥归属和运维访问边界区分开来:区域标签只是部署参数,主备副本、日志、监控和工单系统里的数据未必跟着走。对邮件、对象存储和数据库托管一类服务,采购时值得要求供应商给出数据流图、各类副本的位置、密钥管理的控制权、破窗访问流程、实体与分包商清单,以及退出时的删除证明。

UTM 的 Triton 给 QEMU 虚拟机带来 DirectX 11

UTMUTM 博客

UTM 介绍了 Triton,用 Windows 的用户态与内核态驱动对接 VirtIO 和 Neptune,为 QEMU 里的 Windows 客户机提供 DirectX 11 支持。文章同时承认 macOS 后端、兼容性以及 Apple 相关组件的许可证仍有约束。Windows 客户机的图形加速长期是 QEMU 在桌面与 CI 场景里的难点,虚拟设备与宿主渲染器若能配合,ARM 上的 Windows 负载就少一层替代方案。

OWNS、CALM 与 ORBIT 组成企业 AI 信任栈

Vibhor Kumar作者博客

Vibhor Kumar 把此前提出的三套框架串成一个自上而下的结构。OWNS 是战略层,看的是平台选型中的成本、生态健康度、监管暴露面和规模化能力;CALM 是架构就绪层,判断平台能否可靠演进并被有效治理;ORBIT 是执行层,管的是模型决策能不落空、不重复、不出现无法解释的失败。作者的说法是三层依次依赖:没有就绪的战略只是愿景,没有执行的就绪只是架构表演。他强调平台需要同时承接事务、分析、向量检索与智能体负载。