結論
-L
オプションを使えば良い(PostgreSQL 8.1 から追加)。
psql ... -L psql.log
-L filename
--log-file=filename
すべての問い合わせの出力を通常の出力先に出力し、さらにファイルfilename
に書き出します。
以下のようなログが出力される。
/******** QUERY *********/ select count(*) from foo; /************************/ count ------- 218 (1 row) /******** QUERY *********/ select id, name from foo limit 5; /************************/ id | name -----+---------- 869 | ABB 881 | AAB 875 | ABC 891 | AAA 895 | AAB (5 rows)
\i
メタコマンドでファイルから読み込んだSQLとその結果もファイル出力される。
ただし、エラーになったSQLは出力されるが、そのエラー内容などはファイル出力されない。
その他の方法
似たようなオプションに以下がある。
-o filename
--output=filename
全ての問い合わせの出力をfilename
ファイルに書き込みます。 これは\o
コマンドと同じ効力を持ちます。
これは、クエリ結果のみをファイル出力し、発行したSQLはログ出力されない。
\qecho
でログに任意文字列を出力できるので、以下のようにすればSQLをログ出力することはできる、が あまりに面倒。
# \qecho select count(*) from foo; # select count(*) from foo;
Linux なら script
で記録してしまうのが簡単。
$ script psql.log $ psql -h host -p port -d db -U user -a ... # \q $ <Ctrl + D>
script
の終了は Ctrl + D
。
PowerShell なら Start-Transcript
Stop-Transcript
になるのだが
> Start-Transcript -Path "./psql.log" > psql -h host -p port -d db -U user -a ... # \q > Stop-Transcript
しかし、Start-Transcript
では psql
コマンド出力の最後のバッファ分しかログ出力されない。
ので、Start-Transcript
Stop-Transcript
は使えない。