連載
» 2017年02月16日 05時00分 公開

【PostgreSQL】最低限設定しておくべきログ関連パラメータ3選データベースサポート最前線の現場から(8)(2/3 ページ)

[家島拓也,株式会社アシスト]

2:log_line_prefix

 「log_line_prefix」では、各行の先頭に付与するプレフィックスを設定できます。初期状態では何も設定されていません。「%から始まるエスケープシーケンス(*1)」を設定することで、各ステータス情報に置き換えられます。

 例えば、「%t」はタイムスタンプ、「%u」はデータベースのユーザー名、「%d」はデータベース名、「%p」はOSのPID、「%l」は各セッション、プロセスごとのログ行番号となります。


設定方法(Linux系システムの場合)

  • 1:PostgreSQLをインストールしたOSユーザーに接続
# su - <PostgreSQLをインストールしたOSユーザー名>
  • 2:「PGDATA/postgresql.conf」を開き、log_line_prefixの値を「'[%t]%u %d %p[%l]'」に修正する
  • 3:PostgreSQLをリロードする
$ pg_ctl reload

設定方法(Windows系システムの場合)

  • 1:PostgreSQLをインストールしたOSユーザー、あるいはAdministratorユーザーでログインする
  • 2:「PGDATA/postgresql.conf」を開き、log_line_prefixの値を「'[%t]%u %d %p[%l]'」に修正する
  • 3:PostgreSQLをリロードする
> pg_ctl reload

ログファイルの出力例

 ここまでの設定によって、出力されるログファイルは以下のように変わります(例2)。

LOG: received SIGHUP, reloading configuration files
[2015-08-30 20:36:22 JST] 2727[5]LOG: parameter "log_line_prefix" changed to "[%t]%u %d %p[%l]"
[2015-08-30 20:40:26 JST]testuser postgres 3414[1]ERROR: relation "test" does not exist <--
[2015-08-30 20:40:26 JST]testuser postgres 3414[2]STATEMENT: create index test_ind on test(no);
例2 log_line_prefixまでを設定した状態で、test_ind索引を作成しようとして失敗した際に生成されたログファイルの内容
3行目:
・発生時刻:2015-08-30 20:40:26
・処理を実行したユーザー名:testuser
・接続先データベース名:postgres
・OSのPID:3414
・PID 3414に関連するメッセージ1:ERROR: relation "test" does not exist
・PID 3414に関連するメッセージ2:STATEMENT: create index test_ind on test(no);

 例2のログファイルでは、情報が足りなかった例1のログファイルと比べると、エラーが発生した項目に対する詳細な情報も記録されるようになりました。

 得られた情報から、このエラーメッセージは、「testuser」ユーザーが「postgres」データベース内には存在しない「test」表に対して索引を作成しようとしたために発生したことが分かります。ここまで取得しておけば、トラブルシューティングに役立つはずです。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。