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を解放するのは、呼び出し側の責任です。