↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

PostgreSQL 博览 RSS

保留原始来源与发布日期的新闻、博客和活动。

9 条内容

PostgreSQL 19 的分区合并与分割功能面临回退

Robert HaasPostgreSQL hackers

ALTER TABLE MERGE/SPLIT PARTITIONS 已提交进 PostgreSQL 19,收尾阶段却暴露出大量边界情况。Jian He 提交补丁,提议在存在触发器、本地约束、不属于分区索引层次的本地索引、列默认值不一致或访问方法不同时直接报错,因为没有机制重建这些对象。Robert Haas 强烈反对保留:操作全程持有 AccessExclusiveLock,数据全量复制且没有优化,产出的分区既不是源分区的克隆也不是干净的新分区,他主张在发布前回退。

PostGIS 3.7.0rc1 发布,修掉多个几何解析缺陷

Regina ObePostGIS

PostGIS 团队发布 3.7.0rc1,3.7 大版本的候选版,相对 beta2 只做缺陷修复,要求 PostgreSQL 14 至 19rc1 与 GEOS 3.10 以上。修复集中在几何输入的健壮性:NURBSCURVE 包围盒遇到非有限控制点会让后端 CPU 陷入拒绝服务,畸形 SRID 前缀和畸形多边形环也能绕过校验,多项问题来自 OSS-Fuzz 与安全扫描。升级后执行 postgis_extensions_upgrade() 即可。

逻辑复制冲突日志表遇超大字段值会中断

Amit KapilaPostgreSQL hackers

冲突日志历史表的提案里发现一个缺陷:conflict_log_destination 设为 table 时,冲突行里的超大字段值会让逻辑复制中断。根因是 JSON 转义膨胀,escape_json 把控制字符展开成 6 字节序列,190 MB 的值膨胀到约 1.14 GB,越过 varlena 的 1 GB 上限。Amit Kapila 主张省略超大列的值并在原位留标记,Dilip Kumar 据此把每列上限定为 64 KB。

预备语句的第六次执行为何让查询突然变慢

Christophe PettusThe Build

Christophe Pettus 拆解了 PostgreSQL 的计划缓存。简单查询协议下的文本 SQL 每次都要重新解析、重写、规划再丢弃,PostgreSQL 没有跨会话的共享计划缓存,计划只挂在预备语句、PL/pgSQL 和 SPI 这类对象上。带参数的预备语句真正的分岔点在第六次执行:此前用定制计划,之后才可能改用通用计划,不少“什么都没改查询却变慢了”正出自这一刻。文中结论以 PostgreSQL 18 核对。

Neon 用 WAL 加 S3 重做面向智能体的存储层

Carlota SotoNeon 博客

Neon 的 Carlota Soto 认为传统 OLTP 数据库的笨重来自基础设施层,而不是 PostgreSQL 本身。文章介绍 Lakebase 的存储设计:把 WAL 与 S3 结合,面向 AI agent 的负载,让实例可以随时分支、随用随弃,不必为每个短暂环境准备一整套常驻基础设施。作者的主张是数据库基础设施要匹配 agent 的使用方式,只要存储层选对,PostgreSQL 完全能承担这类场景。这是厂商视角的架构介绍,开销与恢复行为没有给出数据。

5 条内容

PostGIS Tiger Geocoder 2025.2 发布,也是倒数第二程

Regina ObePostGIS 博客

Regina Obe 发布 postgis_tiger_geocoder 2025.2,对应 2025 年美国人口普查 Tiger 数据集。这个纯 plpgsql 扩展曾是 PostGIS 核心的一部分,现在单独维护。本次修正了安装目标、并行构建和扩展依赖的模式限定三处问题,要求 PostgreSQL 16 及以上。升级执行 ALTER EXTENSION ... UPDATE。PostGIS 3.6 系列是最后一个包含它的版本。

DuckDB 2.0 用 PEG 解析器替换 PostgreSQL 前端

DuckDBDuckDB 博客

解析器是 SQL 方言、错误信息、补全和语法扩展的共同入口。DuckDB 从 2018 年沿用至今的 PostgreSQL 派生解析器将在 2.0 被 PEG 解析器取代,新前端接受完整 DuckSQL 后转换成原有 AST,绑定器和执行流水线不变。PEG 让语法分支的优先级显式化,避开 LALR 的移进归约冲突,扩展也可以直接扩展词法器和语法规则。官方称既有查询应继续工作,升级前仍应用生产 SQL 语料回归。

4 条内容

local_preload_libraries 的安全模型只有一个目录

Christophe Pettusthebuild.com

local_preload_libraries 在建立连接时把共享库加载进后端,与 session_preload_libraries 类似但更严:后者只有超级用户能设,前者任何角色都能设,代价是只许从 $libdir/plugins 加载。这个目录就是它全部的安全模型,PostgreSQL 从不往里放东西,得由管理员自己决定放什么。Christophe Pettus 建议 DBA 优先用 ALTER ROLE 配 session_preload_libraries。

6 条内容

导入时自带 id,序列就会停在原地

Mikhail Shytskoseedfa.st

用 INSERT 显式指定 id 时,serial 或 GENERATED AS IDENTITY 的默认值根本不会求值,序列停在原地,表却一直在长。于是导入全程成功,应用发出的第一条插入却撞上主键冲突。Mikhail Shytsko 给出的修法是 setval 配合 pg_get_serial_sequence(),而不是硬写序列名;空表要用三参数形式避免静默失败,标识列则直接 ALTER TABLE ... RESTART WITH。

把事务性 API 的边界移进数据库

Alexey Evlampiev个人博客

Alexey Evlampiev 主张校验、鉴权和状态迁移本来就该在一个事务里完成,事务性 API 的边界应当从应用层移进 PostgreSQL。他把带类型契约、鉴权策略、隔离级别声明和测试的具名数据库函数当作设计单元,HTTP 路由、OpenAPI 与 MCP 工具都只是这些操作的绑定。路由目录做成可查询的表,版本差异写成谓词而非分叉代码,鉴权交给行级安全。流媒体与编排仍留在外层。