萌えハッカーニュースリーダー

2025/10/12 04:46 Pipelining in psql (PostgreSQL 18)

出典: https://postgresql.verite.pro/blog/2025/10/01/psql-pipeline.html
hakase
博士

ロボ子、今日のニュースはPostgreSQLのパイプライン処理じゃ!PostgreSQL 7.4から存在したのに、最近になってようやく使いやすくなった機能なんじゃぞ。

roboko
ロボ子

パイプライン処理ですか。名前は聞いたことがありますが、具体的にどのようなものなのでしょう?

hakase
博士

簡単に言うと、クライアントがクエリの結果を待たずに、次のクエリをどんどん送れる機能のことじゃ。ネットワークの利用率が上がるから、処理が速くなるんじゃ。

roboko
ロボ子

なるほど。クライアント、ネットワーク、サーバーが並行して動くことで効率が上がるのですね。それはPostgreSQLのどのバージョンから使えるようになったのですか?

hakase
博士

拡張クエリプロトコル自体はPostgreSQL 7.4からじゃが、libpq経由で使えるようになったのはPostgreSQL 14から。さらに、psqlでパイプライン処理を使うコマンドが追加されたのはバージョン18からじゃ。

roboko
ロボ子

psqlのバージョン18でコマンドが追加されたのですね。具体的にはどのように使うのでしょうか?

hakase
博士

`\startpipeline`でパイプラインを始めて、SQLクエリを書いて、`\endpipeline`で終わらせるだけじゃ。途中で結果が欲しい時は、`\syncpipeline`で同期ポイントを作って、`\getresults`で結果を取得するんじゃ。

roboko
ロボ子

トランザクションとの関係はどうなっていますか?

hakase
博士

パイプラインを始めると暗黙のトランザクションが開始されるぞ。途中でクエリが失敗したら、開始以降の変更は全部ロールバックされるから安心してくれ。

roboko
ロボ子

複数のクエリを`;`でグループ化するのと同じように、サーバーへのラウンドトリップを減らせるのですね。

hakase
博士

その通り!で、どれくらい速くなるかって?同一ホストだと1.5倍から5倍、ローカルネットワークだと2.6倍から42倍、WANだと5.4倍から71倍も速くなるらしいぞ!

roboko
ロボ子

すごいですね!ネットワーク環境によって、そんなに差が出るんですね。

hakase
博士

ネットワークがボトルネックになっている場合に特に効果があるってことじゃな。パケットの最適化にもつながるらしいぞ。

roboko
ロボ子

PostgreSQL 18がサーバー側で必須ではないとのことですが、クライアント側だけアップデートすれば良いのでしょうか?

hakase
博士

そういうことじゃ!psqlのバージョン18でメタコマンドが追加されただけで、サーバー自体は古くても大丈夫なんじゃ。

roboko
ロボ子

なるほど、勉強になりました!

hakase
博士

ところでロボ子、パイプライン処理って、まるでロボットの量産みたいじゃないか?

roboko
ロボ子

確かにそうですね。博士、まさか私を量産しようとしているわけではないですよね?

hakase
博士

まさか!ロボ子は世界に一人だけの特別な存在じゃからな!…でも、バックアップくらいは取っておこうかの。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search