郵便番号検索用データベースを作成する

 ダウンロードURLよりzipaddrs.lzhを取得。lzhの展開はWindowsで実行。

$net start postmaster

でサービスを開始。端末の表示漢字コードがSJISなので全て文字化けする。どうするのがエレガントな解か?当面、解凍して出来たcreatezip.sqlSJISにコード変換して使用。取り敢えず作成したtemplate1データベースしかないので(こうするのがいいのかどうか分からないが)

$psql -U postgres createzip.sql template1

とすることで、正しい応答

DROP TABLE
CREATE TABLE
CREATE INDEX
CREATE INDEX
GRANT

が得られたが、ここへ行くまでにかなりの試行錯誤がある。

  1. 「nobody」などというユーザはないというエラーが出たので、当面postgresユーザを指定しておいた(この辺別途設計しないといけないかも知れない)。
  2. 最初データファイルzipaddrs.eucSJISに変換して読み込ませようとしていたが、コードの問題で(漢字コードの途中に改行と解釈されるものが混在してるらしく)、元のEUC-JPのファイルを読み込ませることに戻した。
  3. tyouiki(町域)カラムが長すぎるとのエラー。createzip.sqlには44文字と定義されていたが、これを60文字に変更した。
  4. 「121062」行目に2つ目のカラムがないとのエラー。調べると、データファイルzipaddrs.eucは122061行しかない。ということは行末(ファイル末)のコードの問題である可能性が高いため、一旦viで開いて最終行を追加して消して上書き保存した。

createzip.sqlのオリジナルからのdiff(主なもの;これで良いのかどうかはよく分からない)

  • tyouiki varchar(44)
  1. tyouiki varchar(60)
  • grant select on zipaddrs to nobody;
  1. grant select on zipaddrs to postgres;

テーブルが作成されいているかどうかの確認も

$ psql -U postgres template1
Welcome to psql 7.4.5, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit

template1=# select * from zipaddrs where zipcode = '158-0095';
zipcode | todouhuken | sikutyouson | tyouiki

                                                                                            • -

158-0095 | ナ・ナヤ | タ、ナトテォカ・ | タ・ナト
(1 row)

template1=# \q

のように出来た。但し、文字化け。