psql からCSV(カンマ区切りテキスト)出力

PostgreSQLデータベースからCSV形式でデータを取り出したかった。そういうことは時々しかないんだけど、時々なだけに毎回マニュアル(http://www.postgresql.jp/document/pg842doc/html/app-psql.html)ひっくり返してオプション探してる気がする。ので、ちょっと書いとく。

psql -h<DBホスト> -U<ユーザ> <DB名> -t -A -F , -f <SELECT系SQL>.sql > <出力先ファイル>.csv

「-h」「-U」とかDB指定はまあいつものこと。

  • 「-t」列名とか行数とかテーブルのヘッダフッダを無しに
  • 「-A」スペースを補って横幅を合わせるの無しに
  • 「-F ,」区切り文字をカンマに(デフォルトは縦線「|」)
    • なんか手元では「-A」オプション付けてないと効かなかった気がする
    • タブ区切りはどうするのかな、「"\t"」とか書いても駄目だった、そのまま「\t」が来る

出力先ファイル名を指定する「-o」オプションもあるけど、一度やってみて出力をみてからリダイレクトするんで良いと思う。

ここでは「-f」オプションでSQL文の書かれたテキストファイルを指定したけど、「-c」オプションに続けてSQLコマンドを書いても良いし(「-e」オプションじゃないの注意)、標準入力から読み込ませても良い。