PostgreSQLの COPYコマンドは、テーブルデータをCSVファイルなどの形式でインポート/エクスポートする機能です。
COPY
と\copy
があり、COPY
はサーバー側、\copy
はpsqlクライアント側で動作します。
参照するファイルをどちらのマシンで扱うかにより使い分けます。
典型的なコマンド例は以下のとおりです。
\copy <table_name> FROM|TO <file_path> CSV DELIMITER ',' HEADER;
FROM
とTO
はインポート/エクスポートの選択です。CSV
以降はオプションです。
CSV
はフォーマット指定。デフォルトはtext
DELIMITER ','
はファイルのフィールド区切り文字CSV
のデフォルトはカンマ区切りであるため省略可能- タブ区切りファイルなどでは指定が意味を持つ
HEADER
はCSVの先頭行をヘッダーとして扱うオプション- インポート時の
HEADER
は1行目を読み飛ばすだけで、カラムを自動で割り当てる挙動はとらない
- インポート時の
CSVのカラム指定
HEADER
オプションは期待と異なる挙動でしょう。
同じスキーマのテーブルであっても、別DBにインポートすると順序が異なることがあります。
CSVとカラムのマップは、次のようにテーブル名のあとにカンマ区切りのカラム名を指定します。
\copy <table_name> (columns) FROM ...
このカラム定義は、既存DBからエクスポートしたCSVであればそのまま流用できるでしょう。
エクスポート時のクエリ
用途のバリエーションとして、エクスポート時にはテーブルのほか次のようにSELECT
クエリを書けます。
\copy (SELECT ...) TO <file_path> ...
分析用のファイル出力に活用できます。
⁋ 2022/10/24↻ 2024/11/07
中馬崇尋
Chuma Takahiro
Chuma Takahiro