技術情報 / PostgreSQL / システム管理 / CSVでインポート・エクスポート

CSVでインポート・エクスポート

CSVを読み取る

COPY user_table ( user_id, name, age) from '/tmp/user.csv' WITH CSV;

CSVで表示(デリミタの変更)

\pset tuples_only 
\pset pager off
\pset format unaligned
\pset fieldsep ','

結果をファイルに書き出す

\o '/tmp/result'
select * from users;
\o   (で元に戻す)

(シェルから)検索結果をCSVに出力する

echo "select * from users" | psql -A -F ',' -t -U postgres some_db > users.csv

-A 位置揃え無しの出力モード
-F 'sep' フィールド区切り文字の指定
-t ヘッダフッタを抑制する

COPY (SQLコマンド)

COPY (SELECT * FROM users LIMIT 3) TO '/tmp/users.csv' 
  (FORMAT 'csv', QUOTE '"', FORCE_QUOTE *, NULL " ", HEADER 1);
  • super userで実行する必要がある。
  • ファイルはPostgreSQLサーバ上に作成される。

参考

www.postgresql.jp/document/9.6/html/sql-copy.html

\copy (psqlコマンド)

\copy ( SELECT * FROM users ) TO '/tmp/users.csv' with DELIMITER ',' NULL '' CSV HEADER
  • super userでなくても実行できる。
  • ファイルはpsqlコマンドを実行したホスト上に作成される。
  • \copyコマンドは1行で入力する。改行してはいけない。

参考

www.postgresql.jp/document/9.6/html/app-psql.html#app-psql-meta-commands-copy