web-dev-qa-db-ja.com

準備されたステートメントの永続化

ドキュメントには次のように記載されています:

準備されたステートメントは、現在のデータベースセッションの間のみ持続します。

どちらかに方法はありますか

  • 準備されたステートメントを保存する
  • 準備されたステートメントを再生成するコードを作成しますか?
3
Manngo

私があなたを正しく理解しているなら、あなたは関数を使いたいです。

それらは(コードとともに)格納され、実行プランは(場合によっては)キャッシュされます。プランのキャッシュは、最初に聞こえるほど単純ではありません。 https://www.postgresql.org/docs/current/static/plpgsql-implementation.html#PLPGSQL-PLAN-CACHINGPREPAREに関するリンク先のページをお読みください。

コメントからの追加の質問については、PostgreSQL関数は必ずしもSQLインジェクションからユーザーを保護するわけではありません。動的SQLステートメントを間違った方法で作成すると(適切な引用符なしの連結を使用)、このような攻撃の可能性が開かれる可能性があります。

3
dezso