RDB をバックエンドに持った WebApplication を作ろう!と志は大きいのですが、技が伴いませんので、とりあえず検索ってのが簡単かなと。 まずは PHP から PostgreSQL をつつけるようになりましょう。 これが目的。 せっかくだから郵便番号検索でも。
http://www.post.yusei.go.jp/zipcode/dl/kogaki.html から郵便番号のデータを拾ってきましょう。 ゴージャスに全県分です。 拾ってきたら適当な場所に溶かします。 lha を準備しておく必要がありますが、最近の linux なら最初から入ってるでしょう。
さて、取り出した ken_all.csv の中身は JIS コードで書かれているので、 Postgres に都合の良い EUC にしてあげないといけません。今回は、emacs で ken_all.csv を読み込んで coding-system を変更します。
emacs が起動しましたらば
つまり、コントロールキー押したまま x 押します。 離してから Enter キー押します。 そして f 押します。 coding system を何にするか、と問い合わせてきますので、 euc-japan-unix と答えておきます。 そのあと C-x-s で上書き保存。 コントロールキー押したままで x 押して、コントロールキーはまだ離さずに s を押します。 もう離して良し。 最後に C-x-c で終了です。
nkf 1.9 辺りを使うと、半角仮名を全角仮名になおしてくれるんですが、僕が試した限りでは、精度がイマイチなのでした。なのでわざわざemacsを使っているのです。
次に、「”」ダブルクオートを取り去り、よけいなスペースを取り去り、 検索に必要無い部分は飛ばしてしまいましょう。 使う部分だけを切り取る作業です。 データの中からは、2〜9番目のカラムが欲しい部分です。 それと、カンマ区切りをタブ区切りにします。 タブ区切りにする理由は、 pgsql で読み込むとき都合がよいからです。 それだけ。
僕がおこなった方法は、
という内容のファイルを準備して
で、できあがりました。 プログラムのきれい or 汚い は、この際無視です。 目的達成のため走りましょう。 生成された ken_all2.csv が目的のブツです。 ここまででデータの準備は終わりです。
データを入れるデータベースを作ります。 postgres ユーザでログインして作業を行います。 今回は PostDB という名のDBを作ることにしましょう。
このコマンドで PostDB ができました。DB ができたら、次はデータを入れるためのテーブルを作ります。create table コマンドをぽつぽつ打っても構わないのですが、面倒なのでファイルを準備して一括処理させます。
ファイル例:
やってることは3つ。 まずテーブルを作り、次にインデックスを作り、最後にデータをインポートです。 インデックスは、ディスクに余裕がなければ作らなくても良いですが、有ると無いとでは検索速度に大きな違いがでます。
さて実際に処理させます。
-f ファイル名 で読み込むファイルを指定します。次の引数で読み込む DB 名を指定します。最後の引数でどのユーザ権限で作業するかを指定します。デフォルトだと、ファイルのインポートは postgres ユーザでないとできないので、postgres ユーザを使ってます。 インポートには時間が掛かるので、死んだか?と焦らずに、じっくり待ってあげてください。 エラー等が出なければ終了です。
正常にデータが入ったか確認しましょう。 psql コマンドでDBを操作できる状態にします。
プロンプトが出たらSQLを打ってみます。
東京都〜〜というのが数十件帰ってきたらDBの準備はうまく行ってます。確認は終わりましたので、 \q と打って psql から抜けましょう。
WebApplication、ということで今回の場合 Apache から DB にアクセスします。 Apache 経由でアクセスできるよう、ユーザを作る必要があります。 デフォルトでは nobody ですので、 nobody という名のユーザを作ります。
これでユーザができました。 DB側の作業がようやく終わりました。
Moriya / moriya@s1.xrea.com