\copyメタコマンド

テーブルの内容をファイルに出力したり、ファイルからの入力をテーブルに取り込むことができる。

\copy テーブル名 {to | from} ファイル名 [csv] [delimiter '文字']

・toはファイルへの出力、fromはファイルからの入力を意味する。
・csvを指定すると区切り文字がカンマ(,)になる。
・delimiterによって、任意の区切り文字を指定することができる。

準備

empテーブルを元に戻す。

oddtbs=> \i emp_insert011.sql
...
oddtbs=> select * from emp;
  code  |   name   | gender | age |   tel
--------+----------+--------+-----+---------
 564001 | 鈴木義男 |      1 |  58 | 11-1111
 564002 | 斎藤洋子 |      2 |  44 | 22-2222
 564003 | 山田美樹 |      2 |  33 | 33-3333
 564004 | 田中秀明 |      1 |  35 | 44-4444
 564005 | 佐藤研一 |      1 |  30 | 55-5555
 564006 | 相原佳子 |      2 |  28 | 66-6666
 564007 | 小林律子 |      2 |  33 | 77-7777
 564008 | 吉田隆士 |      1 |  24 | 88-8888
(8 rows)

テーブルからファイルへ

  1. ログイン画面から実行。

    oddtbs=> \copy emp to emp01.dat
    oddtbs=> \copy emp to emp02.dat csv
    oddtbs=> \copy emp to emp03.dat delimiter ';'
    
  2. emp01.dat, emp02.dat, emp03.datの内容を確認

ファイルからテーブルへ

  1. ログイン画面から実行。

    oddtbs=> delete from emp;
    oddtbs=> \copy emp from emp01.dat
    oddtbs=> select * from emp;
    
  2. ログイン画面から実行。

    oddtbs=> delete from emp;
    oddtbs=> \copy emp from emp02.dat csv
    oddtbs=> select * from emp;
    
  3. ログイン画面から実行。

    oddtbs=> delete from emp;
    oddtbs=> \copy emp from emp03.dat delimiter ';'
    oddtbs=> select * from emp;
    
  4. 区切り文字があっていない場合どうなるか確認。