システム全体で全ての SQL 実行履歴をログに出力する方法
postgresql.conf に log_statement = 'all'; を追記し、サービスを再起動する。
設定の確認方法は以下。
postgres=# show log_statement;
log_statement
---------------
all
(1 行)
この方法は conf ファイルの編集、サービス再起動が発生するのが難点。
DB 単位で SQL 実行履歴をログに出力する方法
この方法はコマンドだけで即時反映できるので、お奨め。ただし、サービス再起動しても設定は残り続けるので、元に戻す必要があるなら忘れないようにする。
postgres=# ALTER DATABASE mydatabase SET log_statement = 'all';
ALTER DATABASE
設定の確認方法は以下。
postgres=# select * from pg_db_role_setting;
setdatabase | setrole | setconfig
-------------+---------+---------------------
16391 | 0 | {log_statement=all}
(1 行)
元に戻す方法は以下。こちらも即時反映。
postgres=# ALTER DATABASE mydatabase RESET log_statement;
ログの出力先
以下コマンド
postgres=# show log_directory;
や、postgresql.conf の log_directory の設定で確認できる。
例えば RHEL 版や PGDG 版を Linux にインストールしている場合は、/var/lib/pgsql/data/log もしくは /var/lib/pgsql/15/data/log 等がデフォルト。
tail -f /var/lib/pgsql/data/log/postgresql-Fri.log
などで眺めるがよろし。
コメント