CSVファイルからテーブルへデータを登録する、テーブルからCSVへファイル出力する【PostgreSQL】
COPYコマンドとは
COPY文はPostgreSQLによるSQLの独自拡張で、テーブルの内容をカンマ、タブ区切りのテキストファイルに出力したり、あるいはテキストファイルを読み込んでテーブルにコピーする時に使うコマンドです。
CSVからテーブルにデータをコピーする
CSVファイルの内容をテーブルにコピー(インポート)するコマンド例を紹介します。コマンドはpsqlで実行して下さい。※ CSVの各項目がダブルクォーテーションで囲まれている・いないどちらでも同じ動作をします。
# CSVの内容をテーブルにコピー(インポート)する構文
\copy テーブル名 from 'CSVファイルのフルパス'
# カンマ区切り、ヘッダ行なし
\copy test_table from 'CSVファイルのフルパス'
# カンマ区切り、ヘッダ行あり
\copy test_table from 'CSVファイルのフルパス' with csv header
# タブ区切り、ヘッダ行あり
\copy test_table from 'CSVファイルのフルパス' CSV DELIMITER E'\t' HEADER
# encoding
\copy test_table from 'CSVファイルのフルパス' WITH CSV HEADER encoding 'sjis'
\copy test_table from 'CSVファイルのフルパス' WITH CSV HEADER encoding 'UTF8'
補足:WITH CSV HEADER:CSVにヘッダ行があり、ヘッダーを読み込まないようにする
区切り文字はタブの時だけ指定(カンマ区切り用のオプションの「WITH CSV DELIMITER ‘,’」はなくてもOK)
テーブルからファイルにデータを出力する
テーブルの内容をファイル出力する(エクスポート)するコマンド例を紹介します。コマンドはpsqlで実行して下さい。
# CSVファイルを出力
\COPY テーブル名 TO 'CSVファイルパス' DELIMITER ',';
\COPY テーブル名 TO 'CSVファイルパス' WITH CSV;
# CSVファイルをヘッダを含めて出力
\COPY テーブル名 TO 'CSVファイルパス' WITH CSV HEADER;
# CSVファイルをダブルクォーテーションで囲む
\COPY テーブル名 TO 'CSVファイルパス' WITH CSV FORCE QUOTE *;
# 列を指定してCSV出力
\COPY テーブル名(列名1,列名2,…) TO 'CSVファイルパス' DELIMITER ',';
# SELECT文の結果を出力
\COPY (SELECT * FROM テーブル名 where 抽出条件 ) TO 'CSVファイルパス' DELIMITER ',';
# SELECT文の結果を出力しタブ区切りで出力
\COPY (SELECT * FROM テーブル名 where 抽出条件 ) TO 'CSVファイルパス' DELIMITER E'\t';