郵便番号データのロード

※元ネタ調査中

データのダウンロードと、詳細はここを参照。

概略
nkfでKEN_ALL.CSVEUCに変換
sedで"と空白を除去
plsqlでテーブルの作成
plsqlのcopyコマンドでデータをロード
plsqlでインデックスの作成
実行方法
適当なディレクトリにスクリプトとKEN_ALL.CSVを置いて、 「sh import.sh」

シェルスクリプト import.sh


#!/bin/sh
# convert code, remove no data line, remove " to out.txt
#nkf -S -e -Lu 01HOKKAI.CSV | sed -e "s/\"//g" -e "s/*//g" -e "/^$/ d" > /tmp/postal.dat
nkf -S -e -Lu KEN_ALL.CSV | sed -e "s/\"//g" -e "/^$/ d" > /tmp/postal.dat
# drop & create table & import out.txt
psql -f import.sql
rm /tmp/postal.dat




SQLスクリプト import.sql


drop table postal;
create table postal(
jiscode char(5),
postcode_short varchar(5),
postcode char(7),
pref_kana text,
city_kana text,
town_kana text,
pref_kanji text,
city_kanji text,
town_kanji text,
flag1 smallint,
flag2 smallint,
flag3 smallint,
flag4 smallint,
flag5 smallint,
flag6 smallint
);
/* import data */
copy postal from '/tmp/postal.dat' using delimiters ',';
CREATE INDEX postal_idx_jiscode ON postal (jiscode);
CREATE INDEX postal_idx_postcode ON postal (postcode);
CREATE INDEX postal_idx_pref_kana ON postal (pref_kana);
CREATE INDEX postal_idx_city_kana ON postal (city_kana);
CREATE INDEX postal_idx_town_kana ON postal (town_kana);
CREATE INDEX postal_idx_pref_kanji ON postal (pref_kanji);
CREATE INDEX postal_idx_city_kanji ON postal (city_kanji);
CREATE INDEX postal_idx_town_kanji ON postal (town_kanji);
CREATE INDEX postal_idx_flag1 ON postal (flag1);
CREATE INDEX postal_idx_flag2 ON postal (flag2);
CREATE INDEX postal_idx_flag3 ON postal (flag3);
CREATE INDEX postal_idx_flag4 ON postal (flag4);
CREATE INDEX postal_idx_flag5 ON postal (flag5);
CREATE INDEX postal_idx_flag6 ON postal (flag6);