PQsetNoticeProcessor libpq が生成する、注意/警告メッセージの出力方法を制御します。
typedef void (*PQnoticeProcessor) (void *arg, const char *message); PQnoticeProcessor PQsetNoticeProcessor(PGconn *conn, PQnoticeProcessor proc, void *arg);
バックエンドからの注意メッセージを、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 へコピーされます。