Server Programming Interface(SPI)は、ユーザー定義のC関数からSQL問い合わせを実行する機能をユーザーに提供します。
Note: 使用可能な手続き言語(PL)は、問い合わせを実行することができる関数を構築する、別の方法を提供しています。
実際には、SPIは、パーサー、プランナ、オプティマイザ、エクゼキュータへのアクセスを単純化にするための一連の組み込み関数群に過ぎません。また、SPIはメモリ管理も行います。
誤解を防ぐために、これ以降、関数をSPIインターフェイス関数の意味で、プロシージャをSPIを呼び出すユーザー定義のC関数の意味で使うことにします。
SPIを使うプロシージャはエクゼキュータから呼び出されます。SPIは問い合わせを実行するためにエクゼキュータを順番に再帰的に呼び出します。エクゼキュータが再帰的に呼び出されると、それ自身でSPIを呼び出すプロシージャを呼び出す場合があります。
プロシージャの中で問い合わせを実行している最中にトランザクションが中断すると、そのプロシージャに制御が戻らないということに注意してください。それどころか、すべての実行結果がロールバックされてサーバーはクライアントからの次のコマンドを待つ状態になります。この仕様はおそらく将来の版で変更されます。
関連した制約として、(トランザクションの制御文である)BEGIN、END、ABORTができないという点があります。これも将来変更される予定です。
SPI関数は、成功すると非負の結果を(後述のように、整数値またはSPI_resultグローバル変数のどちらかを通して)返します。失敗した場合は、負またはNULLという結果を返します。