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を呼び出すだけです。
返り値は直前の警告プロセッサへのポインタです。 ゼロのコールバック関数ポインタを与えた場合は、何のアクションも得られま せんが、現在のポインタを得ることができます。
一旦警告プロセッサをセットしたら、PGconnオブジェクトか、それから生成され たPGresultオブジェクトが存在している間は、その関数が呼び出される可能性 があると考えておくべきです。PGresultの生成時には、PGconnの現在の警告プ ロセッサのポインタが、PQgetvalueのようなルーチンで 使用可能であるように、PGresultへコピーされます。