1.9. libpq 制御関数

バックエンドからの注意メッセージを、libpq はデフォルトで stderr に出力します。 同様に、わずかですが libpq 自身が生成するメッセージも、同じように出力されます。 この動作は、メッセージに対して何らかの処理をするコールバック関数を用意すれば、置き換えることができます。 このコールバック関数には、エラーメッセージのテキスト(末尾に改行を含む) と、PQsetNoticeProcessor に渡された void 型のポインタがそのまま渡されます(必要であれば、このポインタをアプリケーション固有の状態を知るために使います)。 デフォルトの警告プロセッサは、以下のような単純なものです。

static void
defaultNoticeProcessor(void * arg, const char * message)
{
    fprintf(stderr, "%s", message);
}

特殊な警告プロセッサを使うには、PGconn オブジェクトを生成した直後に、PQsetNoticeProcessor を呼び出します。

返り値は直前の警告プロセッサへのポインタです。 NULL のコールバック関数ポインタを与えた場合は、何のアクションも得られませんが、現在のポインタを得ることができます。

一旦警告プロセッサをセットしたら、PGconn オブジェクトか、それから生成されたPGresult オブジェクトが存在している間は、その関数が呼び出される可能性があると考えておくべきです。 PGresult の生成時には、PGconn の現在の警告プロセッサのポインタが、PQgetvalue のようなルーチンで使用可能であるように、PGresult へコピーされます。