はじめに:なぜpsql ¥COPYコマンドが重要なのか
PostgreSQLで大量のデータを扱うとき、Psql ¥COPYコマンドは最も効率的な方法の一つです。
通常のINSERT文を使うより圧倒的に高速で、CSVファイルの入力(インポート)や出力(エクスポート)に広く利用されています。
この記事では、PREP法を活用しながら、初心者でも理解しやすい形で「Psql ¥COPYコマンド」を体系的に解説します。
psql ¥COPYコマンドとは?基本の仕組み
psql ¥COPYとは?
¥COPYはpsqlクライアント側で実行されるCOPYコマンドです。
通常のCOPYはサーバー側で動きますが、¥COPYはローカル環境のファイルを直接操作できます。
ポイントは次の通り:
- COPY → サーバー側実行
- ¥COPY → クライアント側(Psql)実行
- CSVファイルの取り扱いに便利
- 権限エラーが起きにくい
- GUIツール(A5:SQL Mk-2(A5M2))では実行不可
COPYとの違い(比較表)
| 項目 | COPY | ¥COPY(psql) |
|---|---|---|
| 実行場所 | サーバー | クライアント |
| 必要な権限 | superuser権限 | 不要 |
| CSVファイルの保存場所 | サーバー側 | ローカルPC |
| 用途 | 本番サーバでのバルクロード | 開発者のPCでのCSV操作 |
どういう時に役立つか
ローカルのCSVファイルを簡単かつ高速にPostgreSQLに読み込みたい
データをCSVファイルとしてエクスポートしたい
サーバー側にファイルを置けない(権限がない)
このように、日々の開発・検証作業で非常に役立つコマンドです。
¥COPYを使ったCSVインポート
¥COPYを使ったCSVインポートの基本構文
\COPY FROMを使います。
\COPY table_name FROM 'file_path' WITH (FORMAT csv);¥COPYを使ったCSVインポート例
memberテーブルに対してCSVファイルをインポートします。
| 項目 | データ型 |
|---|---|
| id | INTEGER |
| name | VARCHAR |
| age | INTEGER |
CSVファイルを作成し、保存します。
id,name,age
1,"Alice",20
2,"Bob",30今回は以下のフォルダに格納しました。
C:\temp\work\01_member_import.csvコマンドプロンプトにて対象のデータベースに接続します。
psql -U postgres -d postgres
コマンドを実行します。
\COPY member FROM 'C:\temp\work\01_member_import.csv' WITH (FORMAT csv, HEADER true);正常に終了すると、COPYした件数が表示されます。
COPY 2
A5:SQL Mk-2にて取り込み結果を確認。CSV設定したデータが正常に登録されていることが確認できます。

複数のCSVを一括でインポートする方法
\iコマンドを使うことで複数のCSVを一括でインポートすることが可能です。
\iコマンドとは、指定したSQLファイルを読み込むことができます。
以下のフォルダに複数CSVを作成。
C:\temp\work\multiple_testファイル名
02_member_import.csv
03_member_import.csv
04_member_import.csv\COPYコマンドを取込ファイルの数だけ記載したSQLファイルを作成します。
\COPY member FROM 'C:\temp\work\multiple_test\02_member_import.csv' WITH (FORMAT csv, HEADER true);
\COPY member FROM 'C:\temp\work\multiple_test\03_member_import.csv' WITH (FORMAT csv, HEADER true);
\COPY member FROM 'C:\temp\work\multiple_test\04_member_import.csv' WITH (FORMAT csv, HEADER true);CSVと同じフォルダにSQLファイルを格納しました。
C:\temp\work\multiple_test\multiple_import.sqlコマンドプロンプトにて対象のデータベースに接続します。
psql -U postgres -d postgres
\iコマンドを実行します。
パスの区切り文字は\ではなく/である必要があります。
\i C:/temp/work/multiple_test/multiple_import.sql正常に終了すると、COPYした件数が表示されます。
COPY 2
COPY 2
COPY 2
A5:SQL Mk-2にて取り込み結果を確認。CSV設定したデータが正常に登録されていることが確認できます。

¥COPYを使ったCSVエクスポート
¥COPYを使ったCSVエクスポートの基本構文
\COPY TOを使います。
\COPY table_name TO 'file_path' WITH (FORMAT csv);¥COPYを使ったCSVエクスポート例
memberテーブルのデータをCSVファイルにエクスポートします。
コマンドプロンプトにて対象のデータベースに接続します。

コマンドを実行します。
\COPY member TO 'C:/temp/work/export/member_export.csv' WITH (FORMAT csv, HEADER true, DELIMITER ',');正常に終了すると、COPYした件数が表示されます。

CSVの出力結果は対象テーブルのデータが全件出力されます。
id,name,age
1,Alice,20
2,Bob,30
3,Yoko,55
4,Makoto,21
5,Sakura,28
6,Shota,41
7,Yui,23
8,Daisuke,31
よく使うオプション一覧
| オプション | 説明 |
|---|---|
| FORMAT csv | CSV形式を指定 |
| HEADER true | 1行目にヘッダーを付与 |
| DELIMITER ‘,’ | 区切り文字の設定 |
| QUOTE ‘”‘ | 囲み文字 |
| NULL ” | 空文字をNULLとして扱う |
| ENCODING ‘UTF8’ | 文字コード指定 |
| FORCE_QUOTE | 指定列を必ず引用符付きで出力 |
まとめ:¥COPYコマンドを使いこなすポイント
この記事では「psql ¥COPYコマンド」を図付で解説しました。
重要ポイントを以下の通り:
- ¥COPYはpsql側で実行され、ローカルのCSVファイルを操作できる
- COPYより権限問題が少なく、開発環境で便利
- インポート・エクスポートともに簡単で高速
- 複数のCSVファイルのインポートを一括で実行可能
実務でもよく使うコマンドなので、ぜひこの記事を参考に使いこなしてみてください。
DB関連おすすめ書籍
基礎から実務レベルまで体系的に学べる“DBエンジニア必携の2冊”として特におすすめです。



コメント