Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 8231

PostgreSQL psql でスプール出力 - A Memorandum

$
0
0


結論

-Lオプションを使えば良い(PostgreSQL 8.1 から追加)。

psql ... -L psql.log

-L filename--log-file=filenameすべての問い合わせの出力を通常の出力先に出力し、さらにファイル filenameに書き出します。

以下のようなログが出力される。

/******** QUERY *********/selectcount(*) from foo;
/************************/count-------218
(1row)

/******** QUERY *********/select id, name from foo limit 5;
/************************/

 id  | name  
-----+----------869 | ABB
 881 | AAB
 875 | ABC
 891 | AAA
 895 | AAB
(5rows)

\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-TranscriptStop-Transcriptになるのだが

> Start-Transcript -Path"./psql.log"> psql -h host -p port -d db -U user -a
...

# \q> Stop-Transcript

しかし、Start-Transcriptでは psqlコマンド出力の最後のバッファ分しかログ出力されない。 ので、Start-TranscriptStop-Transcriptは使えない。




Viewing all articles
Browse latest Browse all 8231

Trending Articles