PostgreSQLの COPYコマンドは、テーブルデータをCSVファイルなどの形式でインポート/エクスポートする機能です。
COPYと\copyがあり、COPYはサーバー側、\copyはpsqlクライアント側で動作します。
参照するファイルをどちらのマシンで扱うかにより使い分けます。
典型的なコマンド例は以下のとおりです。
\copy <table_name> FROM|TO <file_path> CSV DELIMITER ',' HEADER;
FROMとTOはインポート/エクスポートの選択です。CSV以降はオプションです。
CSVはフォーマット指定。デフォルトはtextDELIMITER ','はファイルのフィールド区切り文字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↻ 2022/10/24