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';