

Javaサーブレットからデータベースにアクセスするため、postgreSQLをセットアップした。
(だから、ここにあるのは、Javaで使うという前提のもの)
その時に書いたメモを載せてみたのだが、みんなそれぞれ環境が違うと思うし、
必ずしもここにあるようにはいかないかもしれないけど、何かの参考になればと。
OSは、Red Hat Linux release 6.1、postgreSQLのバージョンは、7.1.2。
(古いバージョンの事例ですいません。でも、何かの役にたてば・・・)
セットアップする際に苦労したというか迷った点はたった1つ。日本語の問題だ。
文字コード(Char Set)をどうするか何度もやり直してしまった。
このデータベースを使うシステムでは、PCで作成したクエリーが書かれたファイルから初期値を
インサートしておいて、その後、HTMLのフォームに入力されたものをJavaサーブレットが
受け取ってデータベースにセーブしたり、更新したり、その逆で読み出したりするものだ。
つまり、日本語がPCで作成したファイルからとHTMLからと両方から入ってくる。
結局、できてしまえばたいしたことはなかったんだけど・・・。
ほんと、日本語には嫌気がさすね。できれば英語圏に生まれたかったよ・・・。
事前に、postgresql-7.1.2.tarとjakarta-ant1.3をダウンロードしておいて、
それから、Linuxに「postgres」ってユーザも作成しておく。
(JDKとTomCatなどのサーブレットエンジンは、既に設定済みとする)
○ /usr/local/pgsqlと/usr/local/src/postgresql-7.1.2を作成する。
$ mkdir /usr/local/pgsql
$ mkdir /usr/local/src/postgresql-7.1.2
○ もし、再インストールするのなら、前のは全部消しておいた方がいい。
$ rm -R -f /usr/local/pgsql
$ rm -R -f /usr/local/src/postgresql-7.1.2
$ chown postgres:postgres /usr/local/pgsql
$ chown postgres:postgres /usr/local/src/postgresql-7.1.2
postgreSQLをコンパイルする前にjakarta-ant1.3を/usr/localにて解凍
○ /usr/local/pgsqlと/usr/local/src/postgresql-7.1.2を作成する。
export ANT_HOME=/usr/local/jakarta-ant-1.3
export PATH=${PATH}:${ANT_HOME}/bin
$ source ~/.bashrc
$ tar xfvz postgresql-7_1_2_tar.tar
$ ./configure --enable-multibyte=EUC_JP --with-java
○ --with-javaでJDBCドライバも一緒にコンパイル、作成されるように指定する。
$ make
$ make check
$ make install
PATH="$PATH":/usr/local/pgsql/bin
export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH="$MANPATH":$POSTGRES_HOME/man
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
$ initdb
○ エンジンがTomCatなら、以下のとおりにコピーする
それ以外でも、CLASSPATHがきってあるディレクトリにコピーする。
$ cp /usr/local/src/postgresql-7.1.2/src/interfaces/jdbc/jars/postgresql.jar $TOMCAT_HOME/lib
$ postmaster -i &
○ -i は、他のホストからのアクセスを許可する。& のかわりに -S オプションでもいい。
あとは、ユーザを作成して、データベースを作成して、クエリーを走らせるだけ。
結局、文字コードは、Unicodeとかにせず、EUC_JPにした。
PCで作成したクエリーファイルは、サーバにFTPする際に、EUCに変換するようにした。
HTMLからの入力データは、サーブレットでUnicodeに変換してJDBCドライバに渡すようにした。
JDBCドライバは、データベースの文字コードが何であれ、データを取り出す時は、
Unicodeにして渡してくれるようだ。だから、逆にデータを入れる時も受け取った
データはUnicodeだとして動作しているみたいだ。なので、HTMLからGETした
SJISをこちらで(サーブレットで)Unicodeに変換してからJDBCに渡したら
万事うまくいった。
参考までに、postgreSQLの環境変数にPGCLIENTENCODINGというのがある。
そこに文字コードを指定すると、データベース自体の文字コードは変わらないが、
クライアント側はそこで指定した文字コードであると認識し、変換してくれる。
JDBCとかを使わずに、PCで作成したクエリーファイルをそのまま無変換で
サーバにアップロードし、日本語文字列などをインサートしたいという場合は、
便利だと思う。この指定を使いたい時は、.bashrcに以下のように追加する。
export PGCLIENTENCODING=SJIS