例えば、他のデータベースや外部アプリから学生情報が入ったCSVファイルが送られてきたとしよう。1件ずつ手でコピペ?いや、それは勘弁。ここでデータ一括インポートの出番だよ。
こんな場面で一括インポートが救世主になる:
- データ移行: あるシステムから別のシステムにデータを移したいとき。例えばExcelや他のDBからPostgreSQLへ。
- データベース初期化: 最初のデータを入れるとき。例えば都市リスト、コース一覧、商品カテゴリなど。
- 外部システムとの連携: 定期的に新しいデータを追加したいとき。例えば外部ファイル経由でデータを更新する場合。
- 大量データの更新: 古いデータを新しいものに置き換えたいとき。
ここまで大丈夫?OKなら次いこう!
データ一括インポートの主なやり方
細かい話に入る前に、そもそもどうやって大量のデータをDBに入れるのかざっくり見てみよう。SQLクエリでやる方法と、もっと便利なファイルからのインポート方法を紹介するよ。
データ挿入用SQLクエリ
データ追加にはINSERT INTOコマンドを使うって、もう知ってるよね。少ない件数ならこれでOK。例えば:
INSERT INTO students (id, name, age, course)
VALUES (1, 'Otto Lin', 20, 'プログラミング');
でも、何十件、何百件、何千件もあると、このやり方は効率悪すぎ。もちろんコードで自動化もできるけど、手作業でやるのは無理ゲーだし面倒。
ファイルからのインポート
だからこそ、CSV(Comma-Separated Values)みたいなファイルからのインポートがよく使われる。これはシンプルなテキスト形式で、1行が1レコード、値はカンマやセミコロンで区切られてる。
CSVファイルの例:
id,name,age,course
1,Otto Lin,20,プログラミング
2,Maria Chi,21,デザイン
3,Alex Ming,19,数学
この形式は人間にもプログラムにも読みやすい。CSVはExcelで開けるし、Pythonとか他の言語でも処理できるし、DBへのインポートも楽勝。ファイルからの一括インポートは手作業より圧倒的に速いし、入力ミスも減るよ。
一括インポートの準備
成功のカギは準備にあり。DBをデータ受け入れOKな状態にして、テーブル構造やデータの正しさをチェックしよう。
テーブル構造のチェック
まずは、ファイルの構造に合ったテーブルがDBにあるか確認しよう。例えば学生データを入れるなら、対応するカラムがあるテーブルが必要。
学生データ用テーブルの例:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER NOT NULL,
course TEXT
);
ポイント:
- カラムのデータ型がファイルのデータと合ってるか確認。
ageが数字なら、CSVのそのカラムも数字だけにしよう。 - 制約付きカラム(
NOT NULLやUNIQUE)は特にデータ準備をしっかり。
データのチェック
次はデータ自体のチェック。インポート前にこれを見ておこう:
- 空行や変な値がないか。 例えば
12,,20,プログラミングみたいな行はエラーになる。nameは必須だからね。
区切り文字の確認。 CSVでカンマ(
,)を使ってるなら、ちゃんと設定しよう。セミコロン(;)なら、インポート時にそれを指定する必要があるよ。文字コード。 PostgreSQLはUTF-8を期待してる。他のエンコーディング(例:Windows-1251)なら変換しよう。
プログラマー向け小ネタ
なんでプログラマーはCSVが好きなの?JSONで苦しんだ後、やっと「シンプル」なデータに出会えるからさ…でもテキスト中のカンマに出会うまではね。
一括インポートの実践例
実際のプロジェクトでも一括インポートはよく使われる。例えば:
- ネットショップの商品カタログ更新。何千件もあるCSVを一瞬でインポートできる。
- CRMシステム間で顧客データを移行。顧客情報や住所、注文履歴をCSVからPostgreSQLへ。
- 分析用に1ヶ月分の売上データをインポート。
これでなんで一括インポートが必要なのか、どう準備するのか分かったよね。次は具体的なインポートツール、例えばCOPYコマンドについて見ていこう。これは次のレクチャーで!
GO TO FULL VERSION