コピーができるだと!?
テーブルとファイル間でデータのコピーができるようだ。
やり方は
- psqlのメタコマンド
- SQL
の2種類ある。
コピーコマンド
\copy
クライアント側のファイルとテーブル間のデータをコピーするコマンド
- ネットワークを介したデータの送受信が必要
- ファイル名は絶対パス・相対パスのどちらでも指定可能
- 実行に権限は必要ない
構文
-
テーブルのデータをファイルに出力する場合
\copy テーブル名 to {ファイル名 | stdout} [with] [オプション]
-
ファイルのデータをテーブルに挿入する場合
\copy テーブル名 from {ファイル名 | stdin} [with] [オプション]
パラメータについて
パラメータ | 説明 |
---|---|
stdout | テーブルのデータを標準出力にコピーする |
stdin | 標準入力(キーボードからの入力)をテーブルにコピーする |
オプション
オプション | 説明 |
---|---|
delimiter [as] '区切り文字' | 各行のデータを列ごとに判別するための区切り文字を指定する デフォルトではタブ(テキスト形式)カンマ(CSV形式)が区切り文字として使用される |
csv | コピー対象のデータをCSV形式で扱う場合に指定する |
header | 出力時にはテーブルのカラム名をヘッダ情報として先頭行に付け足し、入力時にはデータの先頭行を無視する ※コピー対象のデータをCSV形式で扱うときのみ指定できる |
COPY
- ファイル名は絶対パスのみ指定可能
- ファイル名を指定する場合に限り、実行にはデータベースのスーパーユーザ権限が必要
構文
-
テーブルのデータをファイルに出力する場合
COPY テーブル名 TO {'絶対パスのファイル名' | STDOUT} [WITH] [オプション];
-
ファイルのデータをテーブルに挿入する場合
COPY テーブル名 FROM {'絶対パスのファイル名'} [WITH] [オプション];
パラメータについて
パラメータ | 説明 |
---|---|
STDOUT | テーブルのデータを標準出力にコピーする |
STDIN | 標準入力(キーボードからの入力)をテーブルにコピーする |
オプション
オプション | 説明 |
---|---|
DELIMITER '区切り文字' | 各行のデータを列ごとに判別するための区切り文字を指定する デフォルトではタブ(テキスト形式)カンマ(CSV形式)が区切り文字として使用される |
FORMAT csv | コピー対象のデータをCSV形式で扱う場合に指定する |
HEADER | 出力時にはテーブルのカラム名をヘッダ情報として先頭行に付け足し、入力時にはデータの先頭行を無視する ※コピー対象のデータをCSV形式で扱うときのみ指定できる |
※ 複数オプションやFORMATオプションは()でくくる