PostgreSQLのDBにあるデータをCSVで出力する方法
お仕事での防備録です。
調べてみたら、昔からあった機能の様です。以前開発エンジニアから無い、と言われたのに。
調べたらすぐ判明したのでまとめました。でも大したレベルの話じゃないなコレ。
やりたいこと
- PostgreSQLのDBからテーブルのデータをCSV形式で取得したい
- SQL実行結果をCSV形式で取得したい
- テーブルのヘッダー情報も同時に出力したい
やりかた
PostgreSQLのDBからテーブルのデータをCSV形式で取得するには
COPY [テーブル名] TO '[ファイルパス]' CSV;
例)
COPY hogehoge TO '/tmp/hogehoge.csv' CSV;
で可能です。
SQL実行結果をCSV形式で取得するには(古い方法っぽいけど)仮のテーブル作ってCSV形式に出力する方法を使っているのでこんな感じです。
begin;
CREATE TEMP TABLE [テーブル名] AS [SQL]
COPY [テーブル名] TO '[ファイルパス]' CSV;
ROLLBACK;
例)
begin;
CREATE TEMP TABLE a_list_fugas AS select * from hogehoge where id in ('01','03','08');
COPY a_list_fugas TO '/tmp/hogehoge.csv' CSV;
ROLLBACK;
最後にヘッダーを出すには
COPY [テーブル名] TO '[ファイルパス]' WITH CSV HEADER;
例)
COPY a_list_fugas TO '/tmp/hogehoge.csv' WITH CSV HEADER;
でヘッダー付きで出力されます。また出力される差違の文字コードはDBの文字コードです。
おわりに
調べるとすぐ分かるんだからもっと早く調べれば良かった。
お陰でどれだけの時間を無駄にしていたことか。やはり知らないのは罪ですね。