PostgreSQLのクエリ(SQL)のログを確認する
PostgreSQLを運用していると、「どんなクエリが実行されているのか確認したい」と思う場面は多くあります。性能チューニングやエラー調査の際にログを残しておくと非常に役立ちます。ここでは、PostgreSQLでクエリログを出力する手順を解説します。
インストールフォルダ内のpostgresql.confを確認する
まずはPostgreSQLの設定ファイル postgresql.conf を探します。
通常は以下の場所に格納されています。
Linux: /var/lib/pgsql/<バージョン>/data/postgresql.conf
Windows: C:\Program Files\PostgreSQL\<バージョン>\data\postgresql.conf
環境によって異なる場合があります。

postgresql.conf内のlog_statementの引数を変更する
次に、設定ファイルをエディタで開き、log_statement の値を変更します。
デフォルト ⇒ #log_statement = ‘none’
変更後 ⇒ log_statement = ‘all’
設定できる値は以下の通りです。
none : ログを出力しない(デフォルト)
ddl : CREATE / ALTER / DROP などDDLのみログに出力
mod : DDLに加えて、INSERT / UPDATE / DELETE も出力
all : 全てのSQLを出力
今回は all を指定しますが、本番環境ではログ肥大化に注意してください。

サービスを再起動する
設定を変更したら、PostgreSQLのサービスを再起動する必要があります。
Linuxの場合:
sudo systemctl restart postgresql
Windowsの場合:
サービス一覧を開く
PostgreSQL を選択して「再起動」をクリック
再起動後、新しい設定が反映されます。

ログを確認する
デフォルト設定の場合、dataディレクトリ直下の log フォルダにログが保存されます。
ログの保存場所は postgresql.conf の以下のパラメータで決まります。
log_directory = ‘pg_log’ # デフォルトではデータディレクトリ配下
log_filename = ‘postgresql-%Y-%m-%d.log’
Linux環境なら例えば:
tail -f /var/lib/pgsql/<バージョン>/data/pg_log/postgresql-YYYY-MM-DD.log
でリアルタイムにクエリログを追うことができます。

まとめ
いかがでしたでしょうか?ログを確認できるようになれば幸いです。手順をまとめると以下となります。
1:postgresql.conf を探す
2:log_statement を ddl / mod / all に変更
3:サービスを再起動する
4:ログディレクトリで出力を確認する
これでPostgreSQLのクエリログを確認できるようになります。
コメント