PostgreSQLでSQL実行結果をファイルに出力する

SQLの実行結果をcsv,tsv,htmlとかいろいろ出力する方法

出力するファイルの指定

このコマンドの後のSQLの結果がファイルに書き込まれる(権限ないと書き込めない)

\o /home/hoge/foo.txt

以降、出力するフォーマットに関しての設定

コマンド 効果
\a 出力結果を綺麗に並べる/並べない
\f [string] 区切り文字を指定(\aが有効だとそちらが優先)
\H 実行結果をhtmlにして出力(table)
\t 実行結果の件数とかだす/ださない(3 rowsこういうの)
\T [string] tableに属性付与できる
\x カラムを縦に表示する/表示しない

使いそうなのはこのあたりかなと思う。

\a,\xの出力結果

\a
 id  |     name     |     created_at
-----+--------------+----------------------
   1 | hoge         | 2009-12-18 12:00:00
   2 | foo          | 2009-12-18 12:00:00
   3 | hello        | 2009-12-18 12:00:00
(3 rows)
\x
-[ RECORD 1 ]--------------------------
id         | 1
name       | hoge
created_at | 2009-12-18 12:00:00
-[ RECORD 2 ]--------------------------
id         | 2
name       | foo
created_at | 2009-12-18 12:00:00
-[ RECORD 3 ]--------------------------
id         | 3
name       | hello
created_at | 2009-12-18 12:00:00

こんなん。いつもコマンドラインで見るのとおんなじ感じに出力される。

\fの区切り文字

区切り文字の設定によって変わると思うけどcsv,tsvとかよく使うような。

#カンマ区切り
\f ','
#タブ区切り
\f '\t'

\Tの書き方

たぶんこんなん。あってるといいな(ぇ

\T 'class="hoge" width="100%" height="600"'

テーブル自体をファイルに出力したい場合はCOPYコマンドを使うといいです