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