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へコピーされます。