【PostgreSQL】psql ¥COPYコマンドを使ってCSV出力・入力を最速化

目次

はじめに:なぜ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ファイルをインポートします。

項目データ型
idINTEGER
nameVARCHAR
ageINTEGER
STEP
CSVファイルの作成

CSVファイルを作成し、保存します。

id,name,age
1,"Alice",20
2,"Bob",30

今回は以下のフォルダに格納しました。

C:\temp\work\01_member_import.csv
STEP
DB接続

コマンドプロンプトにて対象のデータベースに接続します。

psql -U postgres -d postgres
STEP
\COPYコマンド実行

コマンドを実行します。

\COPY member FROM 'C:\temp\work\01_member_import.csv' WITH (FORMAT csv, HEADER true);
STEP
取り込み結果確認

正常に終了すると、COPYした件数が表示されます。

COPY 2

A5:SQL Mk-2にて取り込み結果を確認。CSV設定したデータが正常に登録されていることが確認できます。

複数のCSVを一括でインポートする方法

\iコマンドを使うことで複数のCSVを一括でインポートすることが可能です。
\iコマンドとは、指定したSQLファイルを読み込むことができます。

STEP
取込用複数CSVの作成

以下のフォルダに複数CSVを作成。

C:\temp\work\multiple_test

ファイル名

02_member_import.csv
03_member_import.csv
04_member_import.csv
STEP
SQLファイルの作成

\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
STEP
DB接続

コマンドプロンプトにて対象のデータベースに接続します。

psql -U postgres -d postgres
STEP
\iコマンドでSQLファイルを実行

\iコマンドを実行します。

パスの区切り文字は\ではなく/である必要があります。

\i C:/temp/work/multiple_test/multiple_import.sql
STEP
取り込み結果確認

正常に終了すると、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ファイルにエクスポートします。

STEP
DB接続

コマンドプロンプトにて対象のデータベースに接続します。

画像に alt 属性が指定されていません。ファイル名: 12d0186c4f773d95570250c0a6c53eed.png
STEP
\COPYコマンド実行

コマンドを実行します。

\COPY member TO 'C:/temp/work/export/member_export.csv' WITH (FORMAT csv, HEADER true, DELIMITER ',');
STEP
出力結果確認

正常に終了すると、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 csvCSV形式を指定
HEADER true1行目にヘッダーを付与
DELIMITER ‘,’区切り文字の設定
QUOTE ‘”‘囲み文字
NULL ”空文字をNULLとして扱う
ENCODING ‘UTF8’文字コード指定
FORCE_QUOTE指定列を必ず引用符付きで出力

まとめ:¥COPYコマンドを使いこなすポイント

この記事では「psql ¥COPYコマンド」を図付で解説しました。

重要ポイントを以下の通り:

  • ¥COPYはpsql側で実行され、ローカルのCSVファイルを操作できる
  • COPYより権限問題が少なく、開発環境で便利
  • インポート・エクスポートともに簡単で高速
  • 複数のCSVファイルのインポートを一括で実行可能

実務でもよく使うコマンドなので、ぜひこの記事を参考に使いこなしてみてください。

DB関連おすすめ書籍

基礎から実務レベルまで体系的に学べる“DBエンジニア必携の2冊”として特におすすめです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

・20代
・IT未経験からSIerに就職、開発とプロジェクト管理を経験
・働いている中で会計に興味を持ち、ERPの会計領域を挑戦中
・筋トレ最高!
保有資格:日商簿記1級/応用情報/ITストラテジスト

コメント

コメントする

目次