動作例
追記:無料で使えるHeroku Postgres Devは、行数が1万行に制限されることが発表されたので、別の方法(例:SQLiteを組み込む)を検討した方がいいでしょう。
何回かに分けて、拙著『Webアプリケーション構築入門 第2版』のJavaのウェブアプリをHeroku上で動かす方法を紹介してきました。
本質的な部分は以上で尽きているのですが、拙著の第9章で作成する郵便番号検索システム(Google Mapsとのマッシュアップ+Ajaxによるリアルタイム検索)を動作させるためには、Heroku上に郵便番号データベースを作らなければなりません。郵便番号データ程度の規模のデータをPaaSが無料(クレジットカード情報を入力せずに)で提供するデータベースにインポートするのは、面倒なことが多いのですが、Herokuも例外ではありません。ここでは、その方法を紹介します。
まず、Heroku Postgres Devを利用可能にします。本稿執筆時点で、このアドオンはクレジットカード情報を入力せずに利用できます。
以下のようなコマンドで、データベース情報を確認します。
heroku pg:info
この結果、データベース名が「HEROKU_POSTGRESQL_AQUA」だとわかったとします。そうしたら、以下のようなコマンドで、psqlで接続します(ファイアーウォールの中からだと接続できなくて、セキュアインターネット実験サービスでもだめだったりするから、後で何か考えないと・・・)。
heroku pg:psql HEROKU_POSTGRESQL_AQUA
テーブルを作り、データをインポートし、インデックスを張ります。前に作成した/tmp/zip.csvをインポートしています。このファイルをHeroku側に転送しておく必要はありません。前に使った「COPY
」は権限が無いため使えないので、代わりにpsqlのメタコマンドである「\copy
」を使います。
CREATE TABLE zip ( code CHAR(7) NOT NULL, address1 VARCHAR(10) DEFAULT '' NOT NULL, address2 TEXT NOT NULL, address3 TEXT NOT NULL, address4 TEXT NOT NULL, office TEXT NOT NULL ); \copy zip FROM '/tmp/zip.csv' WITH CSV CREATE INDEX code_idx ON zip.code; \q
最初から使えるSHARED-DATABASEの代わりに、データベースをデフォルトに設定します。
heroku pg:promote HEROKU_POSTGRESQL_AQUA
これで郵便番号データベースは完成です。すでに紹介したアプリの配備方法を終わらせれば、拙著の郵便番号システムがHeroku上で動きます。