バッチからPostgreSQLにCSVインポートを行う


バッチからPostgreSQLにCSVインポート

環境

  • DBサーバ:Windows10 PostgreSQL11.6
  • クライアント端末:Windows10

※ローカル端末とDBサーバは別の端末にしています。

詳細

PostgreSQLでCSVのインポートを行うにはCOPYコマンドを使用します。
COPY」コマンドにも2種類あり、COPY\COPYがあります。
なにが違うのか?

[COPY]
  • SQLコマンドが実行されるDBサーバーのファイルを読み込む。
  • 複数行にわたって記述できる。
  • 公式ドキュメント
[\COPY]
  • ローカルサーバー(ターミナルを開いているサーバー)のファイルを読み込む。
  • 1行で記述しなければいけない。
  • 公式ドキュメント

サンプル

COPY table1 (col1, col2) FROM :'CSV_PATH' with encoding 'SJIS' format csv force_not_null(col1, col2) HEADER;

※with句について
encoding: csv 読み込むファイルの文字コードがSJIS
format: 'SJIS' ファイルフォーマットがCSV形式
force_not_null: 指定したカラムが空文字の場合にNULLに設定
HEADER: ヘッダ行がある場合は記載する
※他にもオプションあり
※「COPY」と「\COPY」で使えるオプションが違う。

補足

COPY テーブル名 FROM ファイル名 (ファイルからテーブルにデータを読み込む)
COPY テーブル名 TO ファイル名 (テーブルからファイルにデータを出力)
・「COPY」の場合はDBサーバ側にCSVを配置してインポートを行い、DBサーバ側にCSVが出力される。
・「\COPY」の場合はクライアント端末側にCSVを配置してインポートを行い、DBサーバ側にCSVが出力される。