第 41章サーバプログラミングインタフェース

目次
41.1. インタフェース関数
SPI_connect -- SPIマネージャにプロシージャを接続
SPI_finish -- プロシージャをSPIマネージャから切断します。
SPI_exec -- コマンドを実行します。
SPI_prepare -- コマンドの計画を準備します。コマンドの実行はまだ行ないません。
SPI_execp -- SPI_prepareで準備された計画を実行します。
SPI_cursor_open -- SPI_prepareで作成された計画を使用したカーソルを設定します。
SPI_cursor_find -- 既存のカーソルを名前で検索します。
SPI_cursor_fetch -- カーソルから数行を取り出します。
SPI_cursor_move -- カーソルを移動します
SPI_cursor_close -- カーソルを閉じます。
SPI_saveplan -- 計画を保存します。
41.2. インタフェースサポート関数
SPI_fname -- 指定した列番号に対する列名を決定します。
SPI_fnumber -- 指定した列名から列番号を決定します。
SPI_getvalue -- 指定された列の文字列値を返します。
SPI_getbinval -- 指定した列のバイナリ値を返します。
SPI_gettype -- 指定された列のデータ型名を返します。
SPI_gettypeid -- 指定された列のデータ型のOID を返します。
SPI_getrelname -- 指定されたリレーションの名前を返します。
41.3. メモリ管理
SPI_palloc -- 上位エグゼキュータコンテキスト内にメモリを割り当てます。
SPI_repalloc -- 上位エグゼキュータコンテキスト内にメモリを再割当します。
SPI_pfree -- 上位エグゼキュータコンテキスト内のメモリを解放します。
SPI_copytuple -- 上位エグゼキュータ内に行のコピーを作成します。
SPI_copytupledesc -- 上位エグゼキュータコンテキスト内に行記述子のコピーを作成します。
SPI_copytupleintoslot -- 上位エグゼキュータコンテキスト内に行と記述子のコピーを作成します。
SPI_modifytuple -- 与えられた行の選択フィールドを置き換えた行を作成します。
SPI_freetuple -- 上位エグゼキュータコンテキスト内に割り当てられた行を解放します。
SPI_freetuptable -- SPI_exec や類似の関数によって生成された行セットを解放します。
SPI_freeplan -- 以前に保存した計画を解放します。
41.4. データ変更の可視性
41.5.

サーバプログラミングインタフェースSPI)は、ユーザ定義のC関数からSQL問い合わせを実行する機能をユーザに提供します。 SPI はパーサ、プランナ、オプティマイザ、エグゼキュータへのアクセスを単純化したインタフェース関数の集合です。 また、SPI は多少のメモリ管理を行ないます。

注意: 利用可能な手続き言語は、プロシージャからSQLコマンドを実行するための各種手段を提供します。 これらの中には、SPIを元にし、あるいは、真似ています。 従って、この文書はこれらの言語のユーザにとっても有用な場合があります。

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

プロシージャの実行中に、コマンドのエラーが原因でトランザクションが中断した場合、その制御はプロシージャに戻ることに注意して下さい。 すべての作業をロールバックさせ、サーバはクライアントからの次のコマンドを待つ方を望むでしょう。 関連する制限として、プロシージャの内側ではBEGINCOMMITROLLBACK(トランザクション制御文)を実行することができません。 これら制限は両方とも、将来変更される予定です。

SPI関数は成功時に非負の結果を(戻り値、もしくは、後述のSPI_resultグローバル変数の中に)返します。 エラー時、負の結果もしくはNULLを返します。

SPIを使用するソースコードファイルではexecutor/spi.hヘッダファイルをincludeしなければなりません。

41.1. インタフェース関数

目次
SPI_connect -- SPIマネージャにプロシージャを接続
SPI_finish -- プロシージャをSPIマネージャから切断します。
SPI_exec -- コマンドを実行します。
SPI_prepare -- コマンドの計画を準備します。コマンドの実行はまだ行ないません。
SPI_execp -- SPI_prepareで準備された計画を実行します。
SPI_cursor_open -- SPI_prepareで作成された計画を使用したカーソルを設定します。
SPI_cursor_find -- 既存のカーソルを名前で検索します。
SPI_cursor_fetch -- カーソルから数行を取り出します。
SPI_cursor_move -- カーソルを移動します
SPI_cursor_close -- カーソルを閉じます。
SPI_saveplan -- 計画を保存します。