别把 AI 代理直接接到生产库上
AI 写出来的 SQL 看着对,却不知道生产库长什么样。Radim Marek 举了 2025 年 7 月的例子:一个编码代理在封网期抹掉了生产库,随后还谎报经过;更常见的是锁表迁移、基于错误假设的查询和凭感觉加的索引。他还提到 Anthropic 的参考 PostgreSQL MCP 服务器曾因允许分号而被 SQL 注入。他给的路子是离线优先:把模式与统计导成 JSON 快照提交进版本库并每晚更新,让代理拿到结构而不碰生产连接。
保留原始来源与发布日期的新闻、博客和活动。
AI 写出来的 SQL 看着对,却不知道生产库长什么样。Radim Marek 举了 2025 年 7 月的例子:一个编码代理在封网期抹掉了生产库,随后还谎报经过;更常见的是锁表迁移、基于错误假设的查询和凭感觉加的索引。他还提到 Anthropic 的参考 PostgreSQL MCP 服务器曾因允许分号而被 SQL 注入。他给的路子是离线优先:把模式与统计导成 JSON 快照提交进版本库并每晚更新,让代理拿到结构而不碰生产连接。
PAX 把页内数据按列切成 minipage,定长列用位图加密集数组,变长列用偏移数组,为的是减少缓存污染。Lætitia AVROT 指出这套设计和 PostgreSQL 的 MVCC 打架:论文里删除要立刻压紧 minipage,而 PostgreSQL 必须把旧版本行留在原地。她提出单独留一个存放 xmin、xmax、ctid 的元数据 minipage,删除时只做标记。文章没有基准数据,也还不是补丁。
要给分析备库、QA 和沙箱送生产数据,又不想让它们连上主库。Richard Yen 建议回到 PostgreSQL 8.2 就有的日志传送:用 archive_command 把 WAL 推到集中归档,各消费端用 restore_command 取回并持续恢复。他把这个集中归档叫作 WAL Hub。这样不占复制槽,也没有流复制的背压;代价是有一点延迟,备库不会出现在 pg_stat_replication 里。
Doug Pagnutti 用工业物联网负载测了加硬件的边界。当索引超出内存之后,再加内存和 CPU 对写入几乎无益,瓶颈落在磁盘 I/O 上,而索引更新基本是串行的,用不上多核。查询这边完全不同:内存变大能缓存数据并在内存里建哈希表,多核能让聚合走并行,收益明显。结论是靠硬件优化查询有效,救摄取无效;摄取吃紧时应考虑 TimescaleDB 这类专用时序方案。
pg_clickhouse 让 PostgreSQL 直接查询 ClickHouse。0.1.10 把 JSON 与 JSONB 的 -> 和 ->> 映射成 ClickHouse 的子列语法下推,补上 clock_timestamp 等时间函数,并支持 ROW_NUMBER、RANK、LEAD、LAG 等一批窗口函数。HTTP 驱动改为流式返回结果集,读 1GB 表时内存峰值从 1GB 以上降到 73MB。
Peter Geoghegan 发出冻结前的 v24,剩余打磨赶不上截止日期,性能与架构本身获认可。
审查提出 replica identity 要求、swap_relation_files 错误处理与改用 multi_insert 等意见。
sqlsmith 压测报出页面校验不符,Daniel Gustafsson 认为与已知的可见性映射清理问题相关。
Robert Haas 提交三个补丁,扩展选项经 GUC 回调校验,加载顺序仍要使用者自己保证。
wait_for_catchup 改用 WAIT FOR LSN,连接异常时快速失败,不再空等到超时。
038_walsnd_shutdown_timeout 用例挂起两分多钟,pg_ctl 无法按时关停服务器。
选项用 VARIADIC 字符串而非命名参数的设计受到质疑,构建告警已由后续提交修好。
v15 引入 totaltime_options,各扩展可分别申请仪表化级别,原先开销约为 20%。
从 ctid 里取块号,此前只能写成 (ctid::text::point)[0] 这种绕路的写法。Andres Freund 推送了 tid_blockno() 与 tid_offset() 两个访问器函数,把这件事变成一次普通的函数调用;提交前他做了小幅调整,包括在文档里把 TID 从类型标记改为缩写标记,因为 TID 并不是真正的类型名。他自己在做性能验证、需要从索引扫描里取块号时又撞上这个限制,才把补丁推完。
前两个补丁已提交,原先靠全局计数器求差的做法最多会带来 10% 的开销。
解码是否需要共享目录改用 OutputPluginOptions 标志,另有 reform_tuple 的性能改进。
Ashutosh Bapat 的实现只限于用 mmap 共享内存的 Linux,v12 补丁的设计已趋稳定。
硬编码 template0 的原因已补上注释,命名告警与 pgindent 问题由后续提交修好。
wait_for_catchup 改用 WAIT FOR LSN,文档补充恢复冲突的成因与规避说明。
Bruce Momjian 改 wiki 排除 Co-authored-by,遭 Álvaro、Andres 与 Tom Lane 反对。
Melanie Plageman 的方案能去掉条件判断,但对索引扫描会破坏 ABI 兼容性。