select結果をcsvでファイル出力

自分では結構前から便利に使ってるんだけど、意外に重宝されることが最近ありました

それがこれ

select * from hoge
into outfile '/tmp/hoge.csv'
fields terminated by ','
optionally enclosed by '"'

私の使いみちとしては、

  • 障害対応なんかで、多分このレコードがおかしいんだけど、100%自信がないときに試したい
  • 二日酔いのときに、絶対間違えられないクエリを流すとき
  • ローカルじゃない別の環境で起きてる不具合のデータをサクッととってきたいとき
  • 単にダンプが面倒なとき
  • シャーディングしてるDBで、他のDBへの参照権限がない場合、grantするの大げさやなって思ったときにファイルに出してシェルとかawkでコネコネするとき

/tmp/var/tmp 配下にcsvファイルを落として、ファイル自体の消し忘れを防止することを意識的にしてたりする

ま、mysqlの実行ユーザーにパーミッションがないところには落とせないんですけど

時と場合によっては fields terminated by の指定を変えて、タブ区切りとかスペース区切りにしてシェルとかawkperlで使いやすい形にしたりする

前のプロジェクトの方針?として、「直せるんだったらなにしてもいい」っていうなんともファンキーな空気で、まぁ立ち上げ近くからいたからかもしれませんが、、クエリ打つときは begin commit rollback してって先輩に口酸っぱく言われてました

ただ、家でたら鍵かけたかな?って思うぐらい、一時記憶装置の容量が少ない私は不安になってしまってこういう若干過度なテクニックがわりと発達したのかも

まぁ、もう大体忘れちゃいましたけど・・・

最近はMySQLばっかのプロジェクトに関わることが多いのですが、OracleとかPostgresqlとかにも同様の機能があるのかなぁ