PostgreSQL

PostgreSQLで実行されたSQLをログ出力する方法

More than 3 years have passed since last update.

PostgresSQLで実行したSQLをログ出力する設定手順です。
プログラム経由でDBアクセスしている箇所の挙動がおかしいな、という時や
ORマッピングフレームワークで最終的にどんなSQLが何回発行されてるの?
という時に役立つかもしれません。

環境

  • OS:Windows7
  • PostgresSQL:9.3
  • pgAdmin:1.18.1

手順

1. postgresql.confを開く

postgresql.confはPostgreSQLのインストールフォルダ>data の下にあります。
pgAdminのバックエンド構成エディタを使う場合、
 ファイル>postgresql.confを開く
で対象となるファイルを選択します。
edit_conf_bk.PNG

2. パラメータ:log_statementの値を変更する

log_statement.PNG

意味
none ログに記録しない
ddl CREATE、ALTER、およびDROP文といった、データ定義文を全てログに記録する
mod 全てのddl文に加え、INSERT、UPDATE、DELETE、TRUNCATE、およびCOPY FROMといった、データ変更文をログに記録する
all 全てのSQL文をログに記録する

 ※allを設定してもSQLに構文エラーがある場合は記録されない

3. postgresSQLを再起動する

4. ログが文字化けする場合

パラメータ:lc_messagesの値を変更する
* 変更前:Japanese_Japan.932
* 変更後:ja_JP.UTF-8 または en_US.UTF-8

 ※デフォルト値はinitdbを使用してデータベースクラスタを作成する時に実行環境のロケール設定に従って設定されている

lc_messages.PNG