サーバプログラミングインタフェース(SPI)は、ユーザ定義のC関数からSQL問い合わせを実行する機能をユーザに提供します。 SPI はパーサ、プランナ、オプティマイザ、エグゼキュータへのアクセスを単純化したインタフェース関数の集合です。 また、SPI は多少のメモリ管理を行ないます。
注意: 利用可能な手続き言語は、プロシージャからSQLコマンドを実行するための各種手段を提供します。 これらの中には、SPIを元にし、あるいは、真似ています。 従って、この文書はこれらの言語のユーザにとっても有用な場合があります。
誤解を防ぐために、これ以降、"関数"をSPIインタフェース関数の意味で、"プロシージャ"をSPIを呼び出すユーザ定義のC関数の意味で使うことにします。
プロシージャの実行中に、コマンドのエラーが原因でトランザクションが中断した場合、その制御はプロシージャには戻らないことに注意してください。 それどころか、全ての作業はロールバックされ、サーバはクライアントからの次のコマンド待ち状態になります。 関連する制限として、プロシージャの内側ではBEGIN、COMMIT、ROLLBACK(トランザクション制御文)を実行することができません。 これら制限は両方とも、将来変更される予定です。
SPI関数は成功時に非負の結果を(戻り値、もしくは、後述のSPI_resultグローバル変数の中に)返します。 エラー時、負の結果もしくはNULLを返します。
SPIを使用するソースコードファイルではexecutor/spi.hヘッダファイルをincludeしなければなりません。