CSV ファイルの PostgreSQL へのインポートと SQL 問い合わせ

概要

CSVファイルを PostgreSQL データベースへインポートする方法を説明する。1つのCSVファイルを1つのテーブルとしてインポートする手順を示す。使用するCSVファイルは、先頭行に各列の属性名が記述されている必要がある。テーブル定義のSQLは csvkit(CSVを扱うコマンド行ツール群)の csvsql で生成する。

目次

【サイト内の関連ページ】

PostgreSQL 活用ガイド

前準備

準備として、CSVファイルを用意する。ここでは、csvkit に同梱されているデータファイル ks_1033_data.csv を、次のURLからダウンロードして使用する。

https://github.com/wireservice/csvkit/tree/master/examples/realdata

他のCSVファイルを使う場合の注意点として、CSVファイルの先頭行に、各列の属性名が記述されている必要がある。

csvkit のインストール

csvkit は Python のパッケージである。PostgreSQL へ接続するためのドライバ psycopg2 とあわせてインストールする。Python 3.12 環境を対象とする。

pip install -U --no-user csvkit psycopg2-binary

PostgreSQL のインストール

PostgreSQL の利用方法: 別ページ »にまとめている。

PostgreSQL へのインポート

ここでは、あらかじめデータベース testdb を作成してあるものとする。

  1. テーブル定義SQLを生成する

    csvkit の csvsql で、CSVファイルからテーブル定義のSQLを生成する。

    csvsql ks_1033_data.csv > ks_1033_data.sql
  2. テーブルを定義し、CSVをインポートする

    生成したテーブル定義SQLを実行してテーブルを作成し、psql の \copy でCSVを読み込む。\copy は psql クライアント側でファイルを読むため、クライアントから見たパスを指定する。

    cat ks_1033_data.sql | sudo -u postgres psql -U postgres -d testdb
    echo "\copy \"ks_1033_data\" from 'ks_1033_data.csv' with (format csv, header);" | sudo -u postgres psql -U postgres -d testdb