PostgreSQL | ||
---|---|---|
Prev | Chapter 40. Server Programming Interface | Next |
サーバはメモリコンテキストの中でメモリを獲得します。あるメモリコンテキ ストの中で獲得されたメモリは、そのコンテキストを破壊することにより、他 のコンテキストで獲得されたメモリに影響を与えること無く開放することが できます。
メモリコンテキストを作り、メモリコンテキストを切替えるのが SPI メモリ 管理の役目です。
SPI 手続きは 2 つのメモリコンテキストを扱います。 それは上位 executor メモリコンテキストと手続きメモリコンテキスト(接続 されている場合)です。
手続きが SPI マネージャに接続されるまでは、カレントなメモリコンテキス トは上位 executor コンテキストです。したがって、SPI に接続されるまでは、 手続き自身が palloc/repalloc あるいは SPI ユーティリティ関数を使って行なうメモリ獲得は このコンテキストで行なわれます。
SPI_connect が呼ばれた後は、カレントコンテキスト は手続きのコンテキストになります。 palloc/repalloc あるいは SPI ユーティリティ関数 (SPI_copytuple, SPI_modifytuple, SPI_palloc および SPI_repalloc を除く) によるメモリ獲得はこのコンテキストで行なわれます。
手続きが(SPI_finishを使って) SPI マネージャから切 り離されると、現在のコンテキストが上位 executor コンテキストに復元され、 手続きメモリコンテキストの中で獲得されたメモリはすべて開放されて 使えなくなります!
もしも上位 executor コンテキストに何かを戻す必要があるなら、 このためのメモリを上位コンテキストで確保しなければなりません!
SPI には上位 executor コンテキストで自動的にメモリを開放する機能は ありません!
問い合わせが終了すれば、SPI は問い合わせの実行中に獲得されたメモリを 自動的に開放します!
Prev | Home | Next |
SPI_pfree | Up | Visibility of Data Changes データ変更の可視性 |