PostgreSQLのDBにあるデータをCSVで出力する方法

2018年10月24日パソコン関連PostgreSQL,SQL,データベース,パソコン関連

お仕事での防備録です。

調べてみたら、昔からあった機能の様です。以前開発エンジニアから無い、と言われたのに。

調べたらすぐ判明したのでまとめました。でも大したレベルの話じゃないなコレ。

スポンサーリンク

やりたいこと

  1. PostgreSQLのDBからテーブルのデータをCSV形式で取得したい
  2. SQL実行結果をCSV形式で取得したい
  3. テーブルのヘッダー情報も同時に出力したい

やりかた

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の文字コードです。

おわりに

調べるとすぐ分かるんだからもっと早く調べれば良かった。

お陰でどれだけの時間を無駄にしていたことか。やはり知らないのは罪ですね。

スポンサーリンク