トラブルシューティングの際postmasterは, ときには便利なメッセージをその機会に応じて出力してくれます.もし, postmasterのデバッグ出力を見てみたいと 思ったら,postmasterを-dオプションつきで起動して,その出力をログ ファイルにリダイレクトします:
% postmaster -d >& pm.log &これらのメッセージを見る必要がなければ:
% postmaster -Sとすることもできます. 最後の例では末尾にアンパサンド("&")がないので postmasterはフォアグラウンドで動作する ことと,-Sオプションつきで起動すると, postmasterが何もメッセージを出力せず, 黙々と("S"ilent)仕事をするようになるのを見ておいてください.
Note: このセクションはMassimo Dal Zottoの手によるもので す.
オプションファイル,data/pg_optionsには, トレース情報や,その他諸々のチューニングパラメータを制御する目的で バックエンドに渡す,実行時オプションを記述します.このファイルの いいところは,バックエンドがSIGHUPシグナルを受けた時にこのファイルを 再度読みこむので,Postgresを立ち上げ 直さなくても,その場でさっと実行時のオプションを変更できることです. ファイルで指定できるオプションは,トレーシングパッケージ (backend/utils/misc/trace.c)で使うデバッグ用 フラグ,あるいはバックエンドの動作をコントロールするのに使える数値 パラメータなどです. この新しいオプションとパラメータは, backend/utils/misc/trace.cと, backend/include/utils/trace.hに定義されています.
またこのオプションはPostgresの-Tオプションで 指定することもできます:
postgres options -T "verbose=2,query,hostlookup-"
エラーとデバッグメッセージを出力する関数も syslog(2)を利用できるようになりました. 標準出力,あるいは標準エラー出力に表示されるメッセージには, タイムスタンプとバックエンドのプロセスIDが行頭に付加されます:
#timestamp #pid #message 980127.17:52:14.173 [29271] StartTransactionCommand 980127.17:52:14.174 [29271] ProcessUtility: drop table t; 980127.17:52:14.186 [29271] SIIncNumEntries: table is 70% full 980127.17:52:14.186 [29286] Async_NotifyHandler 980127.17:52:14.186 [29286] Waking up sleeping backend process 980127.19:52:14.292 [29286] Async_NotifyFrontEnd 980127.19:52:14.413 [29286] Async_NotifyFrontEnd done 980127.19:52:14.466 [29286] Async_NotifyHandler done
このフォーマットはログをずっと読みやすく,そしてバックエンドがいつ, 何をしているのかを正確に理解できるようにしてくれます.さらにawkや perlで,ログを追っかけるちょっとしたスクリプトを書いて,データベースの エラーや障害を検出する,トランザクションタイムの統計を計算する,と いったこともやりやすくなります.
syslogへのメッセージ出力には,LOG_LOCAL0ファシリティを使います. syslogを使うかどうかは,pg_optionのsyslogオプションで指定すれば コントロールできます. ただ残念なことに,多くの関数は標準出力や標準エラー出力への表示に 直接printf()を呼び出すので,こういう出力は syslogにリダイレクトしたり,タイムスタンプをつけてあげることができま せん.できればprintfの呼び出しを全部PRINTFマクロに置き換え, 標準エラー出力への出力はEPRINTFマクロを代わりに使うよう変更すれば すっきりするのですが.そうすればどの出力も一律にコントロールできる ようになりますからね.
pg_optionsファイルのフォーマットは以下の通りです.
# コメント option=整数値 # optionを[整数値]に設定 option # option = 1 に設定 option+ # option = 1 に設定 option- # option = 0 に設定キーワードは backend/utils/misc/trace.cで定義されている オプション名の短縮形でもかまいません.
すべてのオプションと,オプションが取りうる値のリストは, pg_options の使用を参照 してください.