Chapter 22. サーバプログラム開発用インタフェース

Table of Contents
22.1. インタフェース関数
22.2. インタフェースサポート関数
22.3. メモリ管理
22.4. データ変更の可視性
22.5.

Server Programming InterfaceSPI )はユーザ定義の C 関数から SQL 問い合わせを実行する機能をユーザに 提供します。使用可能な手続き言語( PL )はこの機能 にアクセスする別の方法を提供しています。

実際には、SPI は、パーサ、プランナ、オブティマイザ、 エグゼキュータへのアクセスを単純化にするための一連の組み込み関数 群に過ぎ ません。また、SPI はメモリ管理も行ないます。

誤解を防ぐために、これ以降、関数SPI インタフェース関数の意味で、 プロシージャSPI を呼び出すユーザ定義の C 関数の意味で使 うことにします。

SPI を使うプロシージャはエグゼキュータから 呼び出されます。SPIは問い合わせを実行するために エグゼキュータを順番に再帰的に呼び出します。エグゼキュータが再帰的に 呼び出されると、それ自身でSPIを呼び出す プロシージャを呼び出す場合があります。

プロシージャの中で問い合わせを実行している最中にトランザクションが中断すると、 そのプロシージャに制御が戻らないということに注意して下さい。 それどころか、 全ての実行結果がロールバックされてサーバはクラ イアントからの次のコマンドを 待つ状態になります。この仕様は将来の版で変更される予定です。

この他の制約として、(トランザクションの制御文である)BEGIN、END、 ABORT とカーソル操作ができないという点があります。これも将来変更される予定です。

SPI 関数は、成功すると非負の結果を(後述のように、 整数値または SPI_result 大域変数のどちらかを通して)返します。失敗した場合 は、負または NULL という結果を返します。

22.1. インタフェース関数

Table of Contents
SPI_connect — ユーザ定義のプロシージャを SPI マネージャに接続します。
SPI_finish — ユーザ定義のプロシージャを SPI マネージャから切断します。
SPI_exec — 実行計画(パーサ+プランナ+オプティマイザ)を生成 し、問い合わせを実行します。
SPI_prepare — ユーザ定義のプロシージャをSPIマネージャに接続します。
SPI_saveplan — 渡されたプランを保存します。
SPI_execpSPI_saveplan によって得られる実行プランを実行します。