デバッグなどでアプリケーションソースコードを修正せずに操作により発行されるSQLステートメントを
確認したいと思った場合、以下に記述したようにpostgresql.confファイルを設定し再起動すればログにSQLステートメントが出力されます。
このような使い方の場面はデバッグなどで使用すると思います。
以下に設定方法を記します。
以下の手順でログにSQLステートメントを出力するようにPostgreSQLを設定します。
ps auxw | grep postgres上記では、postgresで検索しました。postmasterでした方がいい場合もあります。
[sakura@centos6 ~]$ ps auxw | grep postgres | grep -v grep postgres 2083 0.0 0.6 214100 6384 ? S 00:19 0:00 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data postgres 2112 0.0 0.1 177112 1408 ? Ss 00:19 0:00 postgres: logger process postgres 2114 0.0 0.1 214100 1840 ? Ss 00:19 0:00 postgres: writer process <snip>
# This is used when logging to stderr: logging_collector = on # Enable capturing of stderr and csvlog # into log files. Required to be on for # csvlogs. # (change requires restart)
# These are only used if logging_collector is on: log_directory = 'pg_log' # directory where log files are written, # can be absolute or relative to PGDATA
none | 出力しない |
ddl | CREATE、ALTER、およびDROPといった、データ定義コマンドをログに出力します。 |
mod | ddlとINSERT、UPDATE、DELETE、TRUNCATE、およびCOPY FROMをログに出力します。 PREPAREとEXPLAIN ANALYZEコマンドも、そこに含まれるコマンドが適切な種類であればログに出力されます。 |
all | すべてのSQLがログに出力されます。 |
log_statement = 'all' # none, ddl, mod, all
[root@centos6 ~]# service postgresql restart postgresql サービスを停止中: [ OK ] postgresql サービスを開始中: [ OK ]
-bash-4.1$ psql -c 'show log_statement' log_statement --------------- all (1 行)
以下に端末からPostgreSQLを操作しtailコマンドでPostgreSQLのログ出力を確認した結果を記します。
-bash-4.1$ echo $USER postgres -bash-4.1$ createdb sakura -bash-4.1$ psql sakura psql (8.4.13) "help" でヘルプを表示します. sakura=# create table t1 (c1 int, c2 int); CREATE TABLE sakura=# insert into t1 values(1,10); INSERT 0 1 sakura=# select * from t1; c1 | c2 ----+---- 1 | 10 (1 行) sakura=# \q
-bash-4.1$ tail -f $PGDATA/pg_log/postgresql-Mon.log <snip> LOG: 文: CREATE DATABASE sakura; LOG: 文: create table t1 (c1 int, c2 int); LOG: 文: insert into t1 values(1,10); LOG: 文: select * from t1;
以上、PostgreSQLでSQLステートメントをログファイルに出力する方法を記しました。