select結果をcsvファイルに出力する

DBのselect結果をcsvファイルに出力する方法。

◯まずは、MySQLの場合

SELECT * FROM テーブル名
  INTO OUTFILE '/tmp/output.csv'
  FIELDS TERMINATED BY ','
  OPTIONALLY ENCLOSED BY '"';

これで、/tmp/output.csvファイルが作成されます。

ただ、これだとヘッダー情報がつかないので、

select
'カラム1'
,'カラム2'
,'カラム3'
,...
union
SELECT * INTO OUTFILE '/tmp/output.csv'
  FIELDS TERMINATED BY ','
  OPTIONALLY ENCLOSED BY '"' FROM テーブル名;

といった感じで、unionで強引にカラム名をヘッダに付けちゃう感じですね。
多分、もっとスマートなやり方あると思いますが、最近MySQL使ってないので、これでいいやw

◯続いて、PostgreSQL
postgreの場合、copyコマンドを使います。

こんな感じ。

COPY ( テーブル名 or select文 ) TO '/tmp/output.csv' With CSV DELIMITER ',';

 

ちなみに、TOをFROMにすると、インポートもできる優れもの。
こんな感じ。

COPY ( テーブル名) FROM '/tmp/input.csv' With CSV;

 

で、ちょっと、副問合せとか使った長いselect結果を出力しようとしたところ、
syntax errorで怒られた。
selectだけなら実行はできるけど、多分()カッコの問題かなぁ…

てことで、やり方変えます。
psqlコマンドで、select文流して、その結果をcsvファイルに吐き出させます。
最終的にこんな感じ。

psql -h ホスト DB名 -U ユーザー名 -c "select文;" -A -F, > /tmp/output.csv

 

うむ、これで、ヘッダにカラム情報も付けて、出力されました。良かった。良かった。

分析や調査の時にcsvファイル出力できると楽ですね。
てことで、お疲れ様でしたー!

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です