psqlからCSVを作成する

PostgreSQLのpsqlコマンドからExcelカンマ区切り形式のCSVを作成します。

# test_db の user_m テーブルから 項目 user_id, user_name, new_stamp, new_client を対象に Excelカンマ区切り形式のCSV(shift_jis、各項目はカンマ区切り、項目の内容に「"」「,」「改行」を含む場合" -< ""変換後、項目を"で囲む、項目中の改行はLFのみ、行末の改行はCR + LF)を out.csv という名前で書き出す。
# ※ あまりないと思いますが、文字列中にバックスペース\bやベル\aが入っていると失敗します。
# ※ shift_jisへの変換はpostgresqlのclient_encoding指定を利用します。
psql -U postgres -d test_db -AF$'\b' -R$'\a\n' -c "
set client_encoding to sjis;
select
  user_id, user_name, new_stamp, new_client
from
  user_m
;
" | \
  perl -ne '
s/\r\n/\n/;
s/"/""/g;
s/[\b]/","/g;
$buf = (!s/\a\n$/"\r\n/) ? $buf.$_ : print("\"${buf}${_}") && "";
' > out.csv