1998年04月16日
PostgreSQL はいろいろなプラットフォームがサポートされたフリーなRDBMS です。
Linux はメインのプラットフォームらしく、簡単に導入できます。
PostgreSQL については、 PostgreSQL mailing list in Japan (http://www.sra.co.jp/people/t-ishii/PostgreSQL/)に情報がたくさんあります。
PostgreSQL の入手方法もこのページで紹介されています。
Linux にPostgreSQL をインストールするには PostgreSQL Notes for Japanese (http://www.rccm.co.jp/~juk/pgsql/)のページがとても丁寧です。
私はJava のJDBC を勉強する必要があり、Linux で動くJDBC ドライバがあるフリー RDBMS を探していてPostgreSQL にたどりつきました。
フリーDBMSメーリングリストのページ(http://neal.nikkeibp.co.jp/FreeDBMS/) にはその他にもたくさんのフリーDBMS が紹介されています。
上記の PostgreSQL Notes for Japanese (http://www.rccm.co.jp/~juk/pgsql/)のページではLinux 用のバイナリーパッケージ も公開されているようです。
最新バージョンを入れたかったことと、自分でmake してみたかったこともあり、 自力で挑戦してみました。
困ったのは、libreadline というライブラリが必要なのに入手方法がわからない ことでした。このライブラリがなくてもコンパイルする方法も紹介されていますが、 ツールとかでキーボードの矢印キーとかが使えなくなりそうで、 libreadline はぜひいれたいと。
結局インターネットのいろんなところにころがっているFreeBSD 用のlibreadline のソースディレクトリを丸ごともってきてLinux 用にmake してみることにしました。
これが楽勝で、FreeBSD 用のlibreadline のソースにINSTALL 方法のドキュメント ファイルもあるし、configure スクリプトでLinux 用のMakefile も生成できました。
libreadline のインストール最後のmake install でエラーが出ましたが、/usr/local/lib/libreadline.a とか /usr/local/include/readline の下のヘッダファイルとか必要なファイルはちゃんと できたので追求しないことにしました。
cd libreadline chmod 755 configure chmod 755 support/* ./configure make su make install
参考までに、私の場合のPostgreSQL をSlackware-3.4 Linux(kernel 2.0.33) へ入れる 手順は次のような感じでした。
ヘンなエラーが出て先に進めないといったことはありませんでしたが、手順は やや多いようです。
/usr2/local/freesoft/postgresql-6.3.1 というディレクトリは適当に読み替えて 下さい。
postgres アカウント作成 postgres のホームディレクトリを作成 postgres でログイン /usr2/local/freesoft/postgresql-6.3.1/src/Makefile.custom を 新規作成し、MB=EUC_JP を記述 cd /usr2/local/freesoft/postgresql-6.3.1/src configure --prefix=/usr2/local/pgsql インクルードファイルパスの質問で、/usr/local/include/readline を指定 ライブラリパスの指定で/usr/local/lib を指定 make all make install 環境変数 setenv LD_LIBRARY_PATH /usr2/local/pgsql/lib setenv PGLIB /usr2/local/pgsql/lib setenv PGDATA /usr2/local/pgsql/data を.cshrc に設定 source ~/.cshrc で環境変数を読み込み PostgreSQL のinitdb を実行 data/pg_hba.conf を編集してセキュリティーを設定。私はデフォルトのままでOK 別ウィンドのpostgres アカウントから postmaster を実行 cd /usr2/local/freesoft/postgresql-6.3.1/src/test/regress make clean make all runtest ==> numerology, geometry が失敗しました。う〜ん destroydb regression make clean postmaster を停止(Ctrl-C) postgresql-6.3.1/contrib/linux/postgres.init を修正 PGOPTS="-B 256" を PGOPTS="-i -B 256" に書き換え . /etc/rc.d/init.d/functions をコメントアウト . /etc/sysconfig/network をコメントアウト if [ ${NETWORKING} = "no" ] then exit 0 fi をまとめてコメントアウト /etc/rc.d/rc.local に次を追記 ---------------------------------------------- #PostgreSQL if [ -f /usr2/local/freesoft/postgresql-6.3.1/contrib/linux/postgres.init ]; then /usr2/local/freesoft/postgresql-6.3.1/contrib/linux/postgres.init start fi ---------------------------------------------- Linux をリブート
rc.local でDB エンジンを起動するのなら、シャットダウンの時にDB エンジンを 終了させるための手続きを記述する必要があると思います。しかしドキュメントには それに関する話が見当たりません。
postmaster はSIGTERM シグナルで終了してくれるようなので、OS のシャットダウンの 時のSIGTERM で正常に終了しているんでしょうね。(きっとそうだウン)
PostgreSQL にはJava で記述されたクライアントからアクセスするためのJDBC API 準拠のドライバーが付属します。
次のようにしてセットアップします。
(JDK がインストールされている必要があります)
cd /usr2/local/freesoft/postgresql-6.3.1/src/interfaces/jdbc make make examples 環境変数CLASSPATH に、できたpostgresql.jar をフルパスで指定ところがこのJDBC ドライバーでは日本語等のコードが実行時のプラットフォームの エンコードに依存するようになっています。
PostgreSQL はありがたいことに日本語EUC に対応しているのですが、Java プログラム がSJIS 環境で実行されるとSJIS コードがDB バックエンドに届いてしまいます。
そこでプラットフォームによらず必ず日本語EUC コードが送られるようにJDBC ドライバ に簡単な修正を行いました。
postgresql.jdbc_euc_patch980415としてパッチを公開します。
あらゆる機能を試したわけではないので修正もれなどあるかもしれません。 注意してください。
パッチのあて方はcd /usr2/local/freesoft/postgresql-6.3.1/src/interfaces/jdbc patch < postgresql.jdbc_euc_patch980415 makeのようにして下さい。
仕事などで簡単なSQL 文を書くことはあったのですが、DBMS の管理や運用は やったことがありません。
PostgreSQL のインストールができても最初はわからないことの連続でした。
PostgreSQL をインストールして、createdb コマンドでDB を作成し、psql コマンドで 表を作成したり挿入、検索が行えます。
でもpostgres ユーザー以外のユーザーがDB を使うための設定が最初わかりませんで した。
これはpostgres ユーザーの権限からcreateuser コマンドでユーザー登録を行う と登録されたユーザーもpsql コマンドを使えるようになりました。
すると、postgres ユーザーの作成した表に他のユーザーがアクセスできないという 問題にぶつかりました。
これはSQL のgrant 文で権限を設定できることがわかりました。
それでいよいよJDBC を使ってみたのですが、最初は全然動きませんでした。
インストールのところでpostmaster の起動オプションで-i(TCP/IP ソケットによる 接続)を最初はつけていなかったからです。
これには結構はまってしまいました。
JDBC は使えるようにりました。JAVA のサンプルプログラムが入っていてAPI の 雰囲気も容易につかめました。src/interface/jdbc/examples/basic.java を見れば すぐ飲み込めると思います。
ネットワークをまたいでクライアントからJava でサーバーのPostgreSQL に接続する 場合にJDBC のURL をどのように記述すればいいのかがわからず困りましたが、 JDK のドキュメントでjdbc:postgresql://hostname.dokodoko.co.jp/dbnameのように、最後の項目をサーバーのアドレス込みで書けばいいとわかりました。
これだけでローカルで動いていたプログラムが急にネットワークをまたげるようになり 驚きです。
ところが、どうも日本語がうまく扱えないことに気付きました。 これにもかなりはまりましたが、JDBC ドライバに原因がしぼれ、なんとか 改造することができました(上記のパッチですね)。
データベースについてとても参考になったのは UNIX データベース入門 (http://www.wakhok.ac.jp/DB/DB.html)のページでした。
たくさん勉強させていただきました。とても感謝しています。