birdlibpq を使う際の注意

libpq を使う際の注意

PostgreSQL の C 言語版クライアントインターフェイスライブラリ libpq では、サーバから返されるエラーメッセージは問い合わせ実行関数には返されずに、「警告処理」と呼ばれる過程を経て返されます。これがデフォルトでは単に「stderr に書き出す」という処理となっているのですね。
これが普通のコマンドラインで実行されるようなプログラムならば良いのですが、例えば daemon プログラムなどで stdin/stdout/stderr を閉じていたりする場合には、その時たまたま開いている「2番のファイルディスクリプタ」に対して問答無用でエラーメッセージを出力してしまいます1
「stderr に書き出す」というデフォルトの挙動がふさわしくない場合は、必ず自分で警告処理をカスタマイズするようにしましょう。ニンニン。


  1. PostgreSQL とは全然関係のないところにいきなりエラーメッセージが表示されたりして結構びっくりします(笑。 ↩︎