先週、私はオランダで 3 日間を過ごし、2 つのカンファレンスで登壇しました。9月10日(木)にユトレヒトで開催された PGDay Lowlands でのライトニングトークと、9月11日(金)にアムステルダムで開催された Percona Live でのセッションです。このブログ記事では、両カンファレンスでのメモを共有します。
カンファレンス(実際にはあらゆる大規模イベント)ではよくあることですが、会場に到着する前にちょっとした障害を乗り越える必要がありました。PGDay Lowlands の前日である 9月9日(水)、オランダ全土で 24 時間にわたる公共交通機関のストライキが発生し、全国の電車、バス、トラム、地下鉄がストップしたのです。世界中から人が集まるカンファレンスの準備としては理想的とは言えませんでしたが、木曜日の朝にはすべて運行を再開し、予定どおり無事に開催されました。よかったです!
PGDay Lowlands(ユトレヒト)
PGDay Lowlands は、PostgreSQL Europe が主催する 1 日開催のオランダの PostgreSQL カンファレンスです(登壇はすべて英語で行われます)。今回で 3 回目の開催となり、会場は持ち回りで決まります。昨年はロッテルダムのブライドープ動物園で開催され、今年はユトレヒト中心部にある音楽施設 TivoliVredenburg の Cloud Nine というホールがメイントラックとなりました。
昨年、私は 45 分間のフルセッションを行い、今や広く知られるようになった Anatomy of Table-Level Locks in PostgreSQL を発表しました(録画は YouTube でご覧いただけます)。今年は打って変わって、5 分間のライトニングトークに挑戦しました。私にとって最も苦手な形式ですが、とにかくやってみました。
Postgres から離れずにアナリティクスを実行する
5 分間という時間は短いので、ClickHouse でメンテナンスしている 2 つのオープンソース拡張機能(pg_clickhouse と pg_stat_ch)に絞って話しました。どちらも Apache 2.0 ライセンスです。両者に共通する設計思想は、Postgres をフロントエンドおよび信頼できる唯一の情報源(System of Record)として維持しつつ、負荷の高い分析処理はその背後にある ClickHouse に任せるというものです。

個人的な話になりますが、これは ClickHouse の新入社員としての初登壇でした 😀 写真提供: Tom
pg_clickhouse は外部データラッパー(FDW)です。ClickHouse を指す CREATE SERVER を実行し、認証情報を設定した USER MAPPING を追加して、IMPORT FOREIGN SCHEMA を実行します。すると、任意の Postgres スキーマ内に ClickHouse のテーブルが外部テーブルとして表示され、カラム名はそのまま、ClickHouse の型が Postgres の型にマッピングされます。search_path をそのスキーマに変更すれば、既存の読み取りクエリ、ORM、ダッシュボードを変更なしでそのまま実行できます。クエリがプッシュダウン可能な場合、Postgres プランナーはクエリ全体を ClickHouse SQL として ClickHouse に送信し、集計結果を受け取ります。そうでない場合は、プッシュダウンできる部分のみを送り、残りの処理をローカルで完了します。
pg_clickhouse の狙いはシンプルです。ClickHouse へのデータ移行自体は簡単ですが、ダッシュボードや ORM が長年かけて生成してきた膨大な SQL を書き直すのは大変です。この拡張機能を使えば、既存の PostgreSQL クエリを ClickHouse に対して実行できるため、クエリのプッシュダウン機能の向上がロードマップにおける最優先事項となっています。現在、スケールファクター 1 の TPC-H クエリ 22 種類のうち 15 種類が完全にプッシュダウンされます。

ライトニングトークのメインスライド: Analytics Without Leaving Postgres(Postgres から離れずにアナリティクスを実行する)
pg_stat_ch は逆の方向へ動きます。Postgres のフックがすべてのクエリ実行を生イベント(timing, buffers, WAL, CPU, errors, application, client)としてキャプチャし、共有メモリのリングバッファに書き込みます。そしてバックグラウンドワーカーがネイティブプロトコル経由で ClickHouse へバッチを排出し、そこで集計が行われます。pg_stat_statements と同じ query_id を使用するため両者を関連付けられますが、時間やアプリケーション別にスライス可能なクエリごとの履歴、正確なパーセンタイル、エラー追跡が得られます。pg_stat_statements は累積カウンターしか保持しないため、このようなことは不可能です。設計上バックプレッシャーはかかりません。ClickHouse が低速だったり接続できなかったりする場合は、イベントがドロップされてカウントされ、Postgres が待たされることはありません。
その他のライトニングトーク
ライトニングトークは観客として見るのも非常に楽しいため、セッション枠の最後まで残りました。

ライトニングトークを客席で聞いている様子。とても楽しそうです 😀 写真提供: Tom
トップバッターの Cornelia Biacsics 氏は My Lightning Talk Disaster と題し、ちょうど 1 年前の自身の初登壇を振り返りました。また、5 分という形式は新しい登壇者の入門用として薦められがちですが、特に内向的な人にとっては決してノーリスクではないという点も思い起こさせてくれました。外向的な私にとっても、前述のとおり、間違いなく最も難しい形式だと断言できます。Ellert van Koperen 氏は、「テーブルが増加し続けている」ことへの既定の解決策であるパーティショニングが、予期せぬ重大な悪影響をもたらした実例と、それを解決したシンプルな修正方法を紹介しました。Jan Wieremjewicz 氏は pg_tde の最新状況、現時点で動作するもの、今後の課題、参加方法について報告しました。そして Dave Pitts 氏はまったく毛色の異なるテーマで締めくくりました。AI 生成ではなく、デジタル音源と本物のピアノ鍵盤を使って制作された PGDay Lowlands カンファレンスソングの舞台裏です。なんと、このカンファレンスには専用のサウンドトラックがあるのです!
終日ライブ配信と録画が行われており、各トークは後から視聴できるようになります。
PostgreSQL におけるオプティマイザヒント(Michael Banck 氏)
昼食前に Michael Banck 氏のトーク、Optimizer Hints in PostgreSQL を聴講しましたが、非常に興味深い内容でした。Postgres は何十年もの間、プランナーの問題は修正すべきバグであるという理由から、オプティマイザヒントの追加を拒絶してきたことで知られています。Michael 氏は、現在利用可能な手段を紹介しました。enable_* パラメータ(PostgreSQL 18 で刷新され、無効化されたノードタイプには膨大なコストのペナルティを与える代わりにカウントされるようになりました)や、/*+ ... */ 形式のコメントとクエリ ID をキーにしたヒントテーブルを備えた pg_hint_plan です。
私が最も興味深いと感じたのは、Robert Haas 氏が作成した 2 つの新しい PostgreSQL 19 contrib モジュール、pg_plan_advice と pg_stash_advice です。これらは、古典的な意味でのヒントというよりも、プランの安定化を目的としています。
EXPLAIN (PLAN_ADVICE) は、取得されたプラン(結合順序、結合方式、スキャン方式、並列処理)を記述したコンパクトな「アドバイス文字列」を出力します。その文字列を pg_plan_advice.advice 経由でフィードバックしてプランを固定でき、pg_stash_advice はクエリ ID ごとのアドバイスを共有メモリに格納するため、自動的に適用され、再接続や再起動を行っても維持されます。
この実装は、プランナーを置き換えるのではなく制約をかける仕組みであるため、プランナーがもともと検討したはずのプランしか生成されません。Michael 氏の主張は、プランの変動(Plan flip)こそが真の問題であり、わずかな性能低下と引き換えにしてでもプランの安定化を図る価値が十分にある、というものでした。彼のスライドは一読の価値があります。
アムステルダムでのスピーカーディナー
ユトレヒトから直接アムステルダムに向かい、木曜日の夜に Percona Live のスピーカーディナーに参加しました。ディナーで他のスピーカーとあらかじめ顔を合わせ、翌朝すでに何人か知った顔がいる状態で会場入りできるというのは、初参加のカンファレンスとして素晴らしい入り方でした。

De Bekeerde Suster での Percona Live スピーカーディナー。Alastair Turner 氏の話を熱心に聞いている私が写っています 🙂
Percona Live(アムステルダム)
Percona Live 2026 は、9月9日から 11 日まで Mövenpick Hotel Amsterdam City Centre で開催されました。MySQL、PostgreSQL、MongoDB、Valkey のトラックが並行して設置されているマルチデータベースカンファレンスであり、PGDay よりも幅広い層が参加していました。私は最終日のみの参加でした。
最終日の朝は、The Columnstore Revolution と題した炉辺談話(Fireside chat)で始まりました。Percona 創業者の Peter Zaitsev 氏が司会を務め、ClickHouse の CTO である Alexey Milovidov と DuckDB の共同創業者である Hannes Mühleisen 氏が、列指向データベースの再興とそれが現代のデータワークロードにとって何を意味するかについて議論しました。

スピーカーディナーで Peter Zaitsev 氏から教えてもらうまで、CTO の Alexey Milovidov が参加することを知らなかったので、嬉しいサプライズでした。
PostgreSQL 19 におけるモニタリングの新機能
私のセッションは、10月の PGConf.EU で行うトークの 30 分短縮バージョンでした。
変更点を 5 つに分類して説明しました。
- ロギング:
log_lock_waitsがデフォルトで有効化され、log_min_messagesでプロセスタイプごとに異なるログレベルを設定できるようになり、log_autoanalyze_min_durationによって autoanalyze のログ出力が autovacuum から分離されました。また、レプリケーション、postgres_fdw、dblinkを経由したリモートサーバーからのメッセージも、ローカルのものと同様にフォーマットされるようになりました。 - WAL と I/O: 新しい
wal_fpi_bytesカウンターが、pg_stat_wal、バックエンドごとの統計情報、VACUUMとANALYZEのログ行、およびEXPLAIN (ANALYZE, WAL)に追加されました。ファイル、パイプ、プログラムに対するCOPY TO/FROMにも専用の待機イベントが設けられました。 WAIT FOR: 非同期スタンバイで read-your-writes セマンティクスを実現するための新しいコマンドであり、WAL の書き込み(written)、フラッシュ(flushed)、リプレイ(replayed)の各段階に対する待機イベントが用意されています。- 新しいシステムビュー:
pg_stat_lock、pg_stat_recovery、pg_stat_autovacuum_scoresが追加されました。 - Multixact と周回(Wraparound): 新しい
pg_get_multixact_stats()の追加と、XID 周回警告のしきい値が 4,000 万トランザクションから 1 億トランザクションへと引き上げられました。
最後に、PostgreSQL 20 に向けてすでにコミットされている内容(バックエンドごとの pg_stat_lock を取得できる pg_stat_get_backend_lock())について触れて締めくくりました。また、待機イベント統計についても取り上げ、hackers リストでの議論がカウンター方式からサンプリング方式へと傾きつつある点を紹介しました。
詳細を知りたい方は、すでに 3 本の記事でその大半を執筆していますのでご覧ください: What's New with Monitoring in PostgreSQL 19、Read your writes: WAIT FOR in PostgreSQL 19、New system views in 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 氏、そして私のトークに足を運んでくださった皆様、本当にありがとうございました。次はバレンシアでお会いしましょう!



