Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
Search
武田 憲太郎
September 03, 2026
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LL言語やWebフレームワークの PostgreSQL対応 〜DBの機能がユーザーに届くまで〜
第57回 PostgreSQLアンカンファレンス@オンライン
2026-09-03 21:40 -
https://pgunconf.connpass.com/event/402653/
武田 憲太郎
September 03, 2026
More Decks by 武田 憲太郎
See All by 武田 憲太郎
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
880
Why Laravel apps break—Mastering the fundamentals to keep them maintainable
kentaroutakeda
1
490
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
6
3.1k
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
2.2k
php-src is waitingfor your contribution or: How to Level Up Your PHP Skills with php-src
kentaroutakeda
0
110
REST API設計の実践 – ベストプラクティスとその落とし穴
kentaroutakeda
4
2.2k
Inertia.jsのサーバサイド実装から学ぶ依存逆転原則の応用
kentaroutakeda
1
240
私の愛したLaravel 〜レールを超えたその先へ〜
kentaroutakeda
13
6.6k
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
2.4k
Other Decks in Programming
See All in Programming
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
220
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.9k
仕様駆動開発の消費期限
watany
20
9.2k
Deep dive into the select statement (GopherCon UK)
jespino
0
160
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.8k
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
230
My Marp Sample
sinoue0108
0
140
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
600
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
370
自分的「カンファレンスの楽しみ方」
syumai
0
170
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
640
Building an army of robots
kneath
306
46k
The Language of Interfaces
destraynor
162
27k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
The Cult of Friendly URLs
andyhume
79
7k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Transcript
LL言語やWebフレームワークの PostgreSQL対応 〜DBの機能がユーザーに届くまで〜 第57回 PostgreSQLアンカンファレンス@オンライン 武田 憲太郎 / @KentarouTakeda
自己紹介 武田 憲太郎 / @KentarouTakeda Webアプリケーション開発者 / OSSコントリビューター • PostgreSQLユーザー歴:
2001年〜 • Webアプリケーションのバックエンドとして利用 • Laravelコントリビューター: 2022年〜 • Eloquent ORMが中心 • PHP本体(php-src)コントリビューター: 2024年〜 • pdo̲pgsql(SQL抽象化レイヤーの PostgreSQLドライバ)が主 2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 2
ドライバ開発を通じて見えた課題感 PostgreSQLの機能がLL言語のユーザーに届くまで(PHPの場合) API PostgreSQL PQsetSingleRowMode() 9.2 / 2012年 ext/pgsql libpqラッパ
pdo_pgsql 抽象化層 非対応 2025年(13年) PQenterPipelineMode() 14 / 2021年 断念(2023年) 非対応 PQsetChunkedRowsMode() 17 / 2024年 2024年11月(2ヶ月) 2026年11月予定 2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 3
pdo̲pgsqlでのチャンクフェッチ対応 $statement = $pdo->prepare( 'SELECT * FROM bench', [Pdo¥Pgsql::ATTR_CHUNK_SIZE =>
1000] ); 対応PR: php/php-src#23210 (2026年11月 PHP 8.6 リリース予定) 補足: pdo̲pgsql(SQL抽象)ではなく ext/pgsql(libpqラッパ)は2024年11月に対応 2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 4
対応前の予想と現実 予想: 数日で対応できるはず • 単一行モードの拡張で良いはず • PQsetChunkedRowsMode() のラッパー 現実: 所要時間2週間以上
→ 対応完了後の延長戦 • 対応中に既存機能のバグをいくつか発見 • バグの共通項は「状態管理」 2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 5
フロントエンド側カーソル制御の既存バグ修正 • まだバックエンドに送っていない文を破棄 • バックエンドがエラーとして拒否した文を破棄 • エラー状態のトランザクション内での CLOSE 文 •
ロールバックされた WITH HOLD カーソルの解放 2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 6
COPY とそれ以外との競合 PQresultStatus が致命的なエラーを示した場合 であっても、libpqがエラー情報を完全に処理でき るようにNULLポインタが返されるまで PQgetResult を呼び出さなければなりません。 PostgreSQL 18.4文書
32.4. 非同期コマンドの処理 より 2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 7
COPY とそれ以外との競合(実例) • COPY_* 状態の drain はビジーループでハング • 多くの言語やツールがこのバグを経験している •
pgbenchはこのバグを6年間抱えていた • psqlは堅牢化のつもりでこのループを呼び込んだ • COPY と PQsetChunkedRowsMode() 組み合わせ • ここを「入口」に様々なものを見つける • COPY と PQsetSingleRowMode() 組み合わせ • 既存バグを直さないと新機能を実装できない 2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 8
対応が断念されたパイプラインモード • 2023年3月: ext/pgsql パイプラインモード対応 • php/php-src#10868 • 2023年11月: PHP
8.3 GAの3日前にリバート • php/php-src#12735 • 再導入の動きはなく現在も非対応 「libpqの薄いラッパ」が既存の状態管理を壊し、 メンテナもレビュアーもそのことに気づかなかった 2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 9
パイプラインモード: 他の言語やライブラリの状況 • node-postgres(古いが非同期前提) • 2021年11月: Issueからの要望 • (複数のPRが頓挫した末に) •
2026年8月: 対応 • psycopg3(リライト) • 2022年8月: 対応(3.1でPipeline mode) 「接続の状態」を設計に織り込んだライブラリは 実装成功に至る 2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 10
バックエンド側の機能追加がユーザーに届かない • DBドライバは「初期に作られる」 • 「一度作ったらそう変えられない」領域 • 抽象化レイヤーを上るほど対応に時間がかかる • ドライバ →
言語 → ライブラリ → FW 2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 11
WebアプリケーションFWの存在 • Web系プログラマーの多くは FWを通じてアプリを書いている • マルチDB対応のFWにベンダー固有機能を 入れるのはそれなりの理由が要る • 言語側も、FWの対応状況に モチベーションが左右される
2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 12
PostgreSQLの躍進(Laravelの場合) • 旧来: 「マルチDB対応が可能なら入れる」 • json演算子・全文検索・幾何データ型など • 最近: pgvectorがブレイクスルー •
2026年 コサイン距離: <=> をラップした様々なAPI • PostgreSQL先行 • 現在: 「DB依存機能も、有用なら入れる」 2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 13
立場ごとの考え • Webアプリケーション開発者 • DBレイヤーの高度な機能を業務アプリに持ち込むのは避けたい • ただし、便利な機能なら使わせて欲しい、ごくシンプルに • FWのコントリビューター •
マルチDB対応製品は、デザインが難しくマージの障壁も高い • LL言語のコントリビューター • FW側の対応が見えないとモチベーションを保ちづらい • バックエンド開発者 • 皆さんの考えを教えてください • 新機能やAPIを検討する時、何を重視し、 どんなクライアント実装を想定しますか? 2026/9/3 LL言語やWebフレームワークのPostgreSQL対応 14
ユーザー あるいは 別レイヤーの開発者の立場から 見えた景色を共有しました ありがとうございました