Subsections

3.1 psql の copy コマンド

PostgreSQL の psql には, ファイルの内容をデータベースのテーブルに挿入したり, 逆にテーブルの内容をファイルに書き出すために, コマンド \copy が用意されています。

3.1.1 基本的な使い方

テキストファイルの内容をデータベースのテーブルに挿入する際の基本的な \copy コマンドの書式は
\copy テーブル名 from ファイル名
です。この場合,ファイルの中身は, 各列がタブ文字で区切られた表形式になっている必要があります。 ファイル名として,パス名を指定することも可能です。 copy は SQL コマンドではありません から,行末の ; が不要であることも注意しておきましょう。

次の内容を持つテキストファイル /pub/db/banana があるとします。 (列間の空白はタブ文字)。
4       banana
5       ichigo	
6       nashi
また,次の SQL コマンドで,二つの列を有するテーブル shina が作成済みであるとします。
CREATE TABLE shina (
  code varchar,
  shohin varchar
);
テーブル shina にファイル banana の中身を挿入するには,
dbnyumon=> \copy shina from /pub/db/banana
とします。 ここで dbnyumon=> は,もちろん,データベース dbnyumon を利用して いる際の psql コマンドが表示するプロンプトです。

結果は次のようになります。

dbnyumon=> SELECT * from shina ;
 code | shohin
------+--------
 4    | banana
 5    | ichigo
 6    | nashi
(3 rows)

注意

\copy コマンドはテーブルにファイルの内容を新たに追加します。 そのため,既にデータが入っているテーブルを新しいデータで置き換えたい場合には, 予め DELETE でデータを全て削除するか, DROP TABLE, CREATE TABLE でテーブルを作り直しておく必要があります。

3.1.2 区切り文字の指定

ファイルの中に,タブ以外の列の区切り文字が使われている場合には,次の形式 で \copy を実行します。
\copy テーブル名 from ファイル名 using delimiters '区切り文字'

ファイル /pub/db/kaki の中身が次のように | で区切られているとします。
7|kaki
8|kuri
これをテーブル shina に入れるには
\copy shina from /pub/db/kaki using delimiters '|'
とします。

3.1.3 参考--テーブルからファイルへの書き出し

\copy コマンドを実行するときに from の代わりに to を指定すれば, データベースのテーブルからファイルにデータを書き出すことができます。