最近に、PostgreSQLをよく使って、データをCSV、TSVに出力する方法をまとめました。
出力したデータをテーブルに登録する方法も紹介します。
コマンドまとめ
データベースサーバに配置できるなら、COPY コマンドを使用する。
クライアントにしか配置できないなら、\copy コマンドを使用する。
事前準備
説明する前に、テーブルを作成します。
CREATE TABLE test (
id varchar(4) NOT NULL,
name varchar(20),
age INTEGER,
PRIMARY KEY (id)
);
INSERT INTO test values(‘0001′,’fuji’,99);
INSERT INTO test values(‘0002’,null,88);
CREATE TABLE test (
id varchar(4) NOT NULL,
name varchar(20),
age INTEGER,
PRIMARY KEY (id)
);
INSERT INTO test values(‘0001′,’fuji’,99);
INSERT INTO test values(‘0002’,null,88);
COPY コマンド
psqlに入ってから、COPYコマンドを使える。
注意点のは出力先は<PostgreSQLサーバ>です。
カンマ区切り(CSV)
COPY (テーブル名) TO ‘(ファイルパス)’ WITH CSV DELIMITER ‘,’;
実行例:
postgres=# COPY test TO ‘/tmp/postgresql/test.csv’ with csv delimiter ‘,’;
COPY 2
postgres=# COPY test TO ‘/tmp/postgresql/test.csv’ with csv delimiter ‘,’;
COPY 2
タブ区切り(TSV)
COPY (テーブル名) TO ‘(ファイルパス)’ WITH CSV DELIMITER E’\t’;
実行例:
postgres=# COPY test TO ‘/tmp/postgresql/test.tsv’ with csv delimiter E’\t’;
COPY 2
postgres=# COPY test TO ‘/tmp/postgresql/test.tsv’ with csv delimiter E’\t’;
COPY 2
カラム名出力
COPY (テーブル名) TO ‘(ファイルパス)’ WITH CSV DELIMITER E’\t’ HEADER;
実行例:
postgres=# COPY test TO ‘/tmp/postgresql/test.tsv’ with csv delimiter E’\t’ HEADER;
COPY 2
postgres=# COPY test TO ‘/tmp/postgresql/test.tsv’ with csv delimiter E’\t’ HEADER;
COPY 2
「”(QUOTE)」で囲み
COPY (テーブル名) TO ‘(ファイルパス)’ WITH CSV DELIMITER E’\t’ FORCE QUOTE * HEADER;
実行例:
postgres=# COPY test TO ‘/tmp/postgresql/test.tsv’ with csv delimiter E’\t’ HEADER FORCE QUOTE *;
COPY 2
postgres=# COPY test TO ‘/tmp/postgresql/test.tsv’ with csv delimiter E’\t’ HEADER FORCE QUOTE *;
COPY 2
\copy コマンド
クライアント側にファイルを出力する。COPYと同じ方法で実行できる。RDSの場合、\copyコマンドがおすすめです。
\COPY (テーブル名) TO ‘(ファイルパス)’ WITH CSV DELIMITER E’\t’ FORCE QUOTE * HEADER;
実行例:
postgres=# \COPY test TO ‘/tmp/postgresql/test.tsv’ with csv delimiter E’\t’ HEADER FORCE QUOTE *;
COPY 2
postgres=# \COPY test TO ‘/tmp/postgresql/test.tsv’ with csv delimiter E’\t’ HEADER FORCE QUOTE *;
COPY 2
CSVファイルをテーブルに挿入
csvファイルを出力するコマンドと同じで、TOをFROMにするとインポートできる
COPY (テーブル名) FROM ‘(ファイルパス)’ WITH CSV DELIMITER E’\t’ HEADER;
実行例:
postgres=# COPY test FROM ‘/tmp/postgresql/test.tsv’ with csv delimiter E’\t’ HEADER;
COPY 2
postgres=# COPY test FROM ‘/tmp/postgresql/test.tsv’ with csv delimiter E’\t’ HEADER;
COPY 2