荷兰Postgres周:PGDay Lowlands与Percona Live见闻
DataHot 速览
作者在荷兰参加两场Postgres会议:9月10日乌得勒支PGDay Lowlands的5分钟闪电演讲,以及9月11日阿姆斯特丹Percona Live的PostgreSQL 19监控分享。演讲介绍ClickHouse维护的Apache 2.0开源扩展pg_clickhouse和pg_stat_ch,思路是让Postgres作为前门与记录系统,ClickHouse承担分析负载。pg_clickhouse是外部数据包装器,可通过CREATE SERVER、USER MAPPING和IMPORT FOREIGN SCHEMA把ClickHouse表映射为Postgres外部表。原文还提到9月9日荷兰全国公共交通罢工,但会议次日如期进行。
为什么值得关注:内容涉及Postgres与ClickHouse集成、Postgres监控扩展及PG生态会议动态,对数据平台与数据库从业者有参考价值。
本文目录 8 节
译文
AI 逐段翻译上周,我在荷兰待了三天,在两个会议上做了两场演讲:9月10日星期四在乌得勒支的PGDay Lowlands上做了一场闪电演讲,9月11日星期五在阿姆斯特丹的Percona Live上做了一场会议演讲。在这篇博客文章中,我将分享这两场演讲的笔记。
正如会议(或任何大型活动)经常发生的那样,在我们到达之前有一个小障碍需要克服。9月9日星期三,就在PGDay Lowlands的前一天,一场全国性的24小时公共交通罢工导致全国各地的火车、公交车、有轨电车和地铁停运。对于一个吸引来自世界各地人们的会议来说,这不是理想的热身,但到了星期四早上,一切都恢复运行,活动按计划进行。耶!
PGDay Lowlands,乌得勒支
PGDay Lowlands是一个为期一天的荷兰PostgreSQL会议(尽管所有演讲都是英文的),由PostgreSQL Europe组织。这是它的第三届,活动地点不断变化:去年在鹿特丹的Blijdorp动物园举行;今年则在乌得勒支市中心的音乐场馆TivoliVredenburg举行,主会场在一个名为Cloud Nine的大厅。
去年我做了一场完整的45分钟演讲,即我那场现在很有名的Anatomy of Table-Level Locks in PostgreSQL(录像在YouTube上)。今年,我选择了另一个极端:一场五分钟的闪电演讲。这是我最难驾驭的形式,但我还是尝试了。
不离开Postgres进行数据分析
五分钟时间不多,所以我只讲了我们ClickHouse维护的两个开源扩展(pg_clickhouse和pg_stat_ch),两者都采用Apache 2.0许可。两者背后的理念是:让Postgres继续作为你的前门和记录系统,让ClickHouse在其背后完成分析方面的繁重工作。
就个人而言,这是我作为ClickHouse新员工的第一场演讲 😀 照片来源:Tom
pg_clickhouse是一个外部数据包装器。你CREATE SERVER指向ClickHouse,添加一个带有凭据的USER MAPPING,然后IMPORT FOREIGN SCHEMA:ClickHouse表会作为外部表出现在你选择的Postgres模式中,列名相同,ClickHouse类型映射为Postgres类型。将search_path更改为该模式,现有的读查询、ORM和仪表板无需修改即可运行。当查询可下推时,Postgres规划器会将整个查询作为ClickHouse SQL发送到ClickHouse,并获取聚合结果;否则它会尽可能下推,并在本地完成其余部分。
pg_clickhouse的要点很简单:将数据迁移到ClickHouse很容易,但重写多年的仪表板和ORM生成的SQL却很难。该扩展让现有的PostgreSQL查询可以在ClickHouse上运行,因此改进查询下推是路线图的首要任务。目前,在规模因子为1的22个TPC-H查询中,有15个可以完全下推。其实很简单:把数据迁移到 ClickHouse 很容易,但重写多年积累的仪表盘和 ORM 生成的 SQL 却很难。该扩展让现有的 PostgreSQL 查询能够在 ClickHouse 上运行,因此改进查询下推是路线图上的首要任务。目前,在规模因子为 1 的情况下,22 条 TPC-H 查询中有 15 条已完全下推。
闪电演讲的主要幻灯片:不离开Postgres进行数据分析
pg_stat_ch则方向相反。Postgres钩子将每次查询执行捕获为原始事件(计时、缓冲区、WAL、CPU、错误、应用程序、客户端),将其写入共享内存环形缓冲区,然后一个后台工作进程通过原生协议将批次排空到ClickHouse,在那里进行聚合。它使用与query_id相同的pg_stat_statements,因此两者可以关联,但你可以获得可按时间和应用程序切片的每查询历史记录,包含真实的百分位数和错误跟踪。pg_stat_statements无法提供这些,因为它只保留累积计数器。设计上没有任何背压:如果ClickHouse缓慢或不可达,事件会被丢弃并计数,Postgres永远不会等待。
闪电演讲环节的其余部分
闪电演讲看起来非常有趣,所以我留在了整个环节。
闪电演讲期间的观众。看我多开心 😀 照片来源:Tom
Cornelia Biacsics以My Lightning Talk Disaster开场,正好一年后回顾她的第一次演讲经历。这也提醒人们,五分钟形式被宣传为新演讲者的轻松入门方式,但并非没有风险,尤其是对内向者而言。作为一名外向者,我可以确认,这也是对我来说最难的形式,正如我上面提到的。Ellert van Koperen展示了一个真实案例,其中分区——对"表不断增长"的默认答案——产生了具有严重后果的连锁效应,以及解决它的简单方法。Jan Wieremjewicz给出了pg_tde的现状更新,今天哪些可用,哪些仍然开放,以及如何参与。而Dave Pitts以完全不同的内容结束了这个环节:PGDay Lowlands会议歌曲背后的故事,这些歌曲是用数字乐器和真实的钢琴键盘制作的,而不是由AI生成的。是的,这个会议有自己的配乐!
整整一天都进行了直播和录制,各个演讲稍后可以观看。
PostgreSQL中的优化器提示,作者Michael Banck
午餐前,我参加了Michael Banck的演讲,PostgreSQL中的优化器提示,我非常喜欢。Postgres几十年来一直以规划器问题是要修复的bug为由,拒绝添加优化器提示。Michael介绍了你今天可以做什么:enable_*参数(在PostgreSQL 18中重新设计,被禁用的节点类型会被计数,而不是被处以巨大的代价惩罚)以及pg_hint_plan及其/*+ ... */注释和按查询ID键控的提示表。
我觉得最有趣的部分是Robert Haas为PostgreSQL 19带来的两个新contrib模块,pg_plan_advice和pg_stash_advice。它们的目标是计划稳定,而不是经典意义上的提示。
EXPLAIN (PLAN_ADVICE)会打印一个紧凑的"建议字符串",描述你得到的计划(连接顺序、连接方法、扫描方法、并行性)。你可以通过pg_plan_advice.advice将该字符串反馈回来以固定计划,而pg_stash_advice将建议按查询ID存储在共享内存中,因此它会自动应用,并在重新连接和重启后仍然存在。
该实现的工作原理是约束计划器而不是替换它,因此你只能得到计划器本来就会考虑的计划。Michael 的论点是,计划翻转才是真正的问题,而稳定的计划往往值得损失一点性能。他的幻灯片值得一读。
阿姆斯特丹的演讲者晚宴
从乌得勒支出发,我直接前往阿姆斯特丹参加周四晚上的 Percona Live 演讲者晚宴。这是一种到达会议的好方式(我是第一次参加):先在晚宴上认识其他演讲者,然后第二天早上到场时就已经认识几张面孔了。
在 De Bekeerde Suster 举办的 Percona Live 演讲者晚宴——看看我正认真听 Alastair Turner 讲话 🙂
Percona Live,阿姆斯特丹
Percona Live 2026于 9 月 9 日至 11 日在阿姆斯特丹市中心 Mövenpick 酒店举行。这是一个多数据库会议,MySQL、PostgreSQL、MongoDB 和 Valkey 分会场并排进行,这使得受众比 PGDay 更广泛。我只参加了最后一天。
最后一天上午以一场名为 The Columnstore Revolution的炉边谈话开场,由 Percona 创始人 Peter Zaitsev 主持,ClickHouse 首席技术官 Alexey Milovidov 和 DuckDB 联合创始人 Hannes Mühleisen 讨论了列式数据库的复兴及其对现代数据工作负载的意义。
在演讲者晚宴上 Peter Zaitsev 告诉我之前,我并不知道我们的首席技术官 Alexey Milovidov 会在那里,所以这也是一个不错的惊喜。
PostgreSQL 19 中监控的新变化
我的演讲是我将在 10 月 PGConf.EU 上所做演讲的 30 分钟版本。
我把这些变化分为五个部分:
- 日志记录:
log_lock_waits现在默认开启,log_min_messages可以接受每种进程类型不同的日志级别,自动分析日志记录通过log_autoanalyze_min_duration从自动清理中分离出来,而来自远程服务器的消息,通过复制、postgres_fdw或dblink传来的,现在格式与本地消息一样。 - WAL 和 I/O:新的
wal_fpi_bytes计数器出现在pg_stat_wal中,还有每后端统计信息、VACUUM和ANALYZE日志行,以及EXPLAIN (ANALYZE, WAL)。COPY TO/FROM文件、管道和程序现在有了自己的等待事件。 WAIT FOR:一个新命令,用于在异步备库上实现读己之写语义,并为 WAL 的已写入、已刷盘和已重放阶段提供等待事件。- 新系统视图:
pg_stat_lock、pg_stat_recovery和pg_stat_autovacuum_scores。 - 多事务和回卷:新的
pg_get_multixact_stats(),以及 XID 回卷警告阈值从 4000 万事务提高到 1 亿事务。
最后我介绍了 PostgreSQL 20 中已经提交的内容(pg_stat_get_backend_lock(),它可以按后端提供 pg_stat_lock)。我还介绍了等待事件统计信息,其中 hackers 邮件列表上的讨论不断朝着采样而不是计数器的方向发展。
如果你想要长版本,我已经在三篇文章中写了大部分内容:PostgreSQL 19 中监控的新变化、读己之写:PostgreSQL 19 中的 WAIT FOR 和 PostgreSQL 19 中的新系统视图。
下一步
这两个活动都将在 2027 年回归,日期和地点待定。
感谢让 PGDay Lowlands 成功举办的人们:Floor Drees、Derk van Veen、Teresa Lopes、Boriss Mejías、Sarah Conway、Stacy Raspopina、Jos van Schouten、Chelsea Dole、Stefan Fercot 和 Ellert van Koperen。还要感谢 Percona 团队的 Peter Zaitsev、Alastair Turner、Jan Wieremjewicz 和 Kai Wagner 邀请我,以及所有来听我演讲的人。瓦伦西亚见!
这篇内容对你有用吗?
反馈只用于改善内容筛选,不等同于收藏