PostgreSQLとCSVとTSV

出力

psql

PostgreSQL のデータをCSV出力する
psql で出力できます。

>psql dbname

dbname=# \o (CSVファイル名)
dbname=# \a
Output format is unaligned.
dbname=# \pset fieldsep ','
Field separator is ','.
dbname=# \pset null '\\N'
Null display is "\N".
dbname=# select * from (テーブル名);
dbname=# \o

\o で出力先を指定
\a で桁そろえをしない
\pset fieldsep でセパレータを指定
'\t' ならタブ区切り
select 文で対象データを抽出
最後の、\o で出力先を戻します。
PostgreSQL のデータをCSV出力する - IT革命〜

コマンドライン

コマンドラインから行いたい場合は、以下の方法があります。

$ psql -c 'SELECT * FROM tablename;' -A -F,

-A 桁そろえをしない
-F セパレータを指定
-t カラム名の出力を無効

NULL は \N
\pset null '\\N'

タブ区切り(TSV)

psql データベース名 -c "SQL文" -A -F $'\t' > CSVファイル名

PostgreSQLのCSV出力(Export)方法 - Qiita

セル内改行は「"」で括る
ExcelのCSV読み込みでセル内改行がある場合 - モーグルとカバとパウダーの日記
Excelでうまく読み込めない場合はOpenOfficeを使う

入力

http://www.j-pal.ne.jp/murai/exp/posgre/no4.html

\copy (テーブル名) FROM (CSVファイル名) USING DELIMITERS ','

\copy (テーブル名) FROM (CSVファイル名) delimiter ','

先頭行をスキップ
\copy (テーブル名) FROM (CSVファイル名) delimiter ',' csv header

http://osb.sra.co.jp/PostgreSQL/Manual/document/pg837doc/html/app-psql.html

CSVファイルのエンコーディングSJISの場合は

文字コードの設定
SET client_encoding TO 'SJIS';
CSVファイルのインポート、エクスポート - toshifusaの日記

してから \copy

その他

  • \copy クライアント側
  • COPY バックエンド

シェルでタブ文字を入力

http://search.luky.org/vine-users.3/msg06209.html
タブ文字を入力するには
シェルやviで: [Ctrl-V][TAB]

$ psql -c 'SELECT * FROM tablename;' -A -F'[TAB]'