PostgresqlでコマンドラインからCSV出力
COPYコマンドを利用するパターン
単純なCOPYコマンド
1 | COPY tablename TO '/tmp/output.csv' DELIMITER ',' |
列指定のCOPYコマンド
1 | COPY tablename(col1, col2, col3) TO '/tmp/output.csv' DELIMITER ',' |
SELECT結果のCOPYコマンド
1 | COPY (SELECT * FROM tablename) TO '/tmp/output.csv' DELIMITER ',' |
※オプション
FORMAT:読み取りまたは書き込みに使用するデータ書式を選択(text、csv(カンマ区切り値)、またはbinary、デフォルトはtext)
DELIMITER:フィールド区切り文字の指定(書式でのデフォルトはタブ文字、CSV書式ではカンマ)
出力結果を復元するにはCOPY…FROM
1 | COPY tablename FROM '/tmp/output.csv' |
psqlコマンドを利用するパターン
SQLを記述してエクスポート
1 | psql -U {user} {dbname} -c 'SELECT * FROM tablename' -A -F, -t > output.csv |
※オプション
-A:位置揃えなしの出力モードに切り替える(デフォルトの出力モードは位置揃えあり)
-F:位置揃えを行わない出力におけるフィールド区切り文字の指定(後続の文字を区切り文字とする、デフォルトは ASCII の縦棒”|”)
-t:列名と結果の行数フッタなどの表示を無効にする
SQLファイルを指定してエクスポート
1 | psql -U {user} {dbname} -f export_csv.sql -A -F, > output.csv |
1 2 3 4 5 | SELECT '"' || coalesce(col1, '') || '"' , '"' || coalesce(cast(col2 as text), '') || '"' FROM tablename; |
メタコマンドを利用してエクスポート
1 | psql -U {user} {dbname} -f export_csv_meta.sql |
1 2 3 4 5 6 7 8 9 10 11 12 | \o output.csv --出力先を output.csv へ切り替え \pset format unaligned --現在有効なフィールド区切り文字で区切って出力 \pset fieldsep ',' --位置揃えなしの出力書式で使用されるフィールド区切り文字を指定 \pset tuples_only --出力列名ヘッダと行数フッタの表示を切り替え SELECT '"' || coalesce(col1, '') || '"' , '"' || coalesce(cast(col2 as text), '') || '"' FROM tablename; \o --出力先を元に戻す |