PostgreSQLは、共有のクエリ実行計画キャッシュを持っていませんが、 プリペアドステートメントではオプションとしてクエリ実行計画キャッシュを使用できます。これにより、 プリペアドステートメントをクエリ計画キャッシュありで使うかなしで使うかを開発者が選択できます。ただし、プリペアドステートメントをクローズすると キャッシュは削除されてしまう点に注意しましょう。
各言語でこの機能を使う方法は次の通りです。
- C
ネイティブなC APIでは、
PQexecParams
という、 プリペア時にバインドパラメータを使用できる機能が提供されています (PQprepare
と対応)。- Java
The PostgreSQLのJDBCドライバは、PGStatement 及びPGConnectionの 標準にはないメソッドである
setPrepareThreshold
を使ってサーバサイドプリペアを 制御します。デフォルト設定は、最初の4回の実行ではプリペア時にバインドパラメータを使い、 最後の1回は使わないという、5になっています。カウンタは
PreparedStatement
ごとに新しく0から始まります。警告
PreparedStatement
キャッシュを使うフレームワークは たくさんあり、データソースのセットアップ時にprepared-statement-cache-size
で設定できます。 そのため、意図せず制限に引っ掛かる事もあり得ます。- Ruby
RubyのPGconn.execは、 オプション引数としてバインドパラメータを受け入れます。 バインドパラメータが渡された場合は、計画の際にそれが使われます。