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ファイル出力できると楽ですね。
てことで、お疲れ様でしたー!