Postgresは、バックエンドへの関数呼び出しイ ンタフェースに近道を用意しています。これはシステム内部への抜け穴である と同時に、潜在的なセキュリティホールにもなり得ます。大多数のユーザの人 はこの機能を必要とはしないでしょう。
PQfn 「近道」を使ってバックエンドの関数実行を要求します。
PGresult* PQfn(PGconn* conn,
int fnid,
int *result_buf,
int *result_len,
int result_is_int,
const PQArgBlock *args,
int nargs);
このうち fnid 引数は、実行する関数のオブジェクト識別子、
result_buf は戻り値を格納するバッファです。呼び出し側は戻り値を格
納するのに十分な領域を確保しておかなければなりません。(このチェッ
クは(ライブラリ側では)していません!)結果の実データ長は
result_len が指す整数で返されます。結果が 4 バイト整数だと想定で
きるなら result_is_int を 1 に、そうでなければ 0 を設定します。
(result_is_int を 1 にすれば、必要に応じて値のバイト順を入れ換え
るよう libpq に指示することになります。そしてクライアントマシン上
で正しい整数値となるように転送します。result_is_int が 0 の場合は、
バックエンドが送ったバイト列を何も修正せずに返します) args と
nargs は関数に渡す引数を指定します。
typedef struct {
int len;
int isint;
union {
int *ptr;
int integer;
} u;
} PQArgBlock;
PQfnは有効な正しい PGresult* を返します。
結果を使う前にはまず、resultStatus を調べておくべきでしょう。
結果が必要なくなった時点で、PQclearによって、
PGresultを解放するのは、呼び出し側の責任です。