PostgreSQL

PostgreSQL 実行したSQLをファイル出力する

実行した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=#
スポンサーリンク