実行したSQLをログファイル(補1)へ出力するには以下の方法があります。何れの場合においても、PostgreSQLサーバ(インスタンス)再起動で設定が反映されます。
(補1)当方は以下フォルダにログファイルを出力していますが、各環境によって異なるとおもいます。
[postgres@vm022 log]$ pwd
/var/lib/pgsql/13/data/log
[postgres@vm022 log]$ ls -l
合計 15460
-rw-------. 1 postgres postgres 9718554 9月 17 00:00 postgresql-Fri.log
-rw-------. 1 postgres postgres 224982 9月 19 23:27 postgresql-Mon.log
-rw-------. 1 postgres postgres 5160547 9月 24 18:21 postgresql-Sat.log
-rw-------. 1 postgres postgres 121966 9月 25 18:24 postgresql-Sun.log
-rw-------. 1 postgres postgres 31240 9月 29 23:27 postgresql-Thu.log
-rw-------. 1 postgres postgres 496785 9月 27 23:55 postgresql-Tue.log
-rw-------. 1 postgres postgres 67497 9月 28 23:58 postgresql-Wed.log
[postgres@vm022 log]$
postgresql.confのlog_statementパラメータを書き換える
postgresql.confのlog_statementパラメータを書き換えれば全てのユーザ、全てのデータベースを対象に実行SQLのファイル出力が可能となります。
特定のデータベースでのみ出力する場合
変更SQL
-- all 全て -- none 出力しない(デフォルト) -- alter database myposdb SET log_statement to 'all' ;
確認SQL
select d.datname,unnest(s.setconfig) from pg_db_role_setting s,pg_database d where s.setdatabase = d.oid and d.datname='myposdb';
確認例
datname | unnest
---------+-------------------
myposdb | log_statement=all
(1 row)
myposdb=#
特定のユーザでのみ出力する場合
特定ユーザからの実行SQL出力指示
-- all 全て -- none 出力しない(デフォルト) -- alter user sooni SET log_statement to 'all' ;
確認例
myposdb=# select p.usename,unnest(p.useconfig) from pg_user p where p.usename='sooni';
usename | unnest
---------+--------------------------------------
sooni | search_path=sooni, public, prjschema
sooni | log_statement=all
(2 rows)
myposdb=#