[ホーム] -> [Aache + PHP + PostgreSQL 実験室]

PostgreSQL のインストール

まず、ソースを展開します。

> tar xzvf postgresql-7.2.1.tar.gz

次に、パッチを当てます。このパッチを当てることにより、いくつかのバグが修正されます。特に理由がない限り、パッチを当てた方が良いでしょう。

> cd postgresql-7.2.1
> gzip -dc < ../jumbo.patch.gz | patch -p1

次に、configure を実行します。そのとき、いろいろなオプションが指定できるので、主要なもののみですが、説明しておきます。

configure のオプション概要
オプション 説明
--enable-multibyte=EUC_JP マルチバイトを使用できるようにするための指定です。この例では、漢字コードを 日本語 EUC に指定してありますが、これはデータベースをつくる際のデフォルトの漢字コードです。データベースをつくる際に漢字コードを指定することもできますので、あまり悩む必要はないでしょう。詳しくは、doc/README.mb.jp を読んでください。
--with-perl perl からアクセスするためのライブラリを作成します。perl がインストールされていない環境の人は、このオプションをつけない方が良いでしょう。
--with-python Python からアクセスするためのライブラリを作成します。Python がインストールされていない環境の人は、このオプションをつけない方が良いでしょう。
--with-tcl
--with-tclconfig=/usr/lib
Tcl/Tk がインストールされている人は、このオプションを指定すると、Tcl インターフェイスがコンパイルされます。この場合、tclConfig.sh のあるディレクトリを、オプションで指定する必要があるようです。この例では、/usr/lib の下に tclConfig.sh があると指定しています。
--with-java Java からアクセスするための JDBC ドライバを作成します。このオプションをつけてコンパイルするには、J2SDK (JDK) と、Apache Ant が必要です。
--with-krb4=/usr/athena
--with-krb5=/usr/athena
他のマシンから PostgreSQL に接続する際に、Kerberos 認証をサポートするようにコンパイルします。バージョン 4 か 5 のどちらかしか指定することが出来ません。インストールされている環境に合わせてください。
--with-openssl 他のマシンから PostgreSQL に接続する際に、SSL による認証や暗号化をサポートするようになります。OpenSSL が正しくインストールされている必要があります。
--with-pam ユーザ認証の際に、PAM を利用するようになります。PAM は Linux や Soralis でサポートされている機能で、/etc/pam.d というディレクトリがある場合は、PAM を利用できると思います。その場合このオプションをつけると、ユーザ認証に対して、PAM を利用した細かいユーザ管理(アカウントやパスワードの有効期限が切れてるとか、あるグループだけ利用できるようにするとか、特定のユーザがログインしたときにログをとるとか)を行えるようになります。
--enable-syslog PostgreSQL の出力するログを、syslog に出力できるようになります。このオプションを指定したからといって、syslog にしか出力できなくなるわけではありません。設定した場合にのみ、syslog に出力するので、後々のことを考えて、指定しておいて損はありません。

利用するオプションをけってしたら、configure を実行するわけですが、その前にちょっとしたアドバイスを。Linux とかでコンパイルするとき、gcc のオプションとして、「-g」が付いてしまうことがあります。PostgreSQL をポートしたい人とはともかく、一般的なユーザは、このオプションはあまり着ける必要がありません。逆にこのオプションが付くと、コンパイルされたファイルのサイズが非常に大きくなってしまいます。これを避けるには、次のように環境変数 CFLAGS を設定します。もちろん、「-g」オプションをつけたままでかまわない人は、環境変数 CFLAGS を設定する必要はありませんけど。

bash/ksh の場合
> export CFLAGS=-O2
csh/tcsh の場合
> setenv CFLAGS -O2

というわけで、configure を実行です。

> export CFLAGS=-O2
> ./configure --enable-multibyte=EUC_JP \
              --with-perl \
              --with-tcl \
              --with-tclconfig=/usr/lib \
              --with-pam \
              --enable-syslog

正常に終了したら、make を行います。

> make

正常に終了したら、root になって、インストールします。

> su
# make install

そして、インストールしたディレクトリの中にある、data ディレクトリのオーナーを、PostgreSQL のスーパーユーザに変更します。この PostgreSQL のスーパーユーザは、root ではだめなので、root 以外で、だれが PostgreSQL のスーパーユーザになるかをきめて、オーナーを変更する必要があります。

ここでは、pgsql と言うユーザを作り、そのユーザが所属するための pgsql というグループも作ります。そして、pgsql ユーザのパスワードを設定しておきます。

pgsql という名のグループとユーザを作成
# groupadd pgsql
# useradd -g pgsql pgsql
# passwd pgsql
PostgreSQL 用のデータディレクトリを作成
# mkdir /usr/local/pgsql/data
# chown pgsql.pgsql /usr/local/pgsql/data
# exit

プログラムのインストールは、これで終了ですので、ここで利用するユーザの設定を、行います。実際には、PATH と、MANPATH に、PostgreSQL のインストール先のディレクトリを含めるのです。bash を使っている人は、自分のホームディレクトリにある ~/.bash_profile ファイルの最後の方に、次の2行を追加してください。PostgreSQL のスーパーユーザも同じ設定が必要で、スーパーユーザに限り、PGDATA も指定しておくと便利です。これは、先ほどのデータディレクトリを設定します。

export PATH=$PATH:/usr/local/pgsql/bin
export MANPATH=$MANPATH:/usr/local/pgsql/man
PostgreSQL のスーパーユーザのみ次も設定
export PGDATA=/usr/local/pgsql/data

csh を使っている人は、~/.cshrc に(tcsh を使っている人は、場合によっては ~/.tcshrc)に次の2行を追加してください。

setenv PATH    $PATH:/usr/local/pgsql/bin
setenv MANPATH $MANPATH:/usr/local/pgsql/man
PostgreSQL のスーパーユーザのみ次も設定
export PGDATA  /usr/local/pgsql/data

変更し終わったら、現在のシェルに反映させます。bash でしたら、次のようになると思います。

> . ~/.bash_profile

csh、tcsh でしたら、次のようにします。

> source ~/.cshrc

これで、ユーザ側の設定は終りです。この PATHMANPATH 設定は、PostgreSQL を使用するすべての人がやった方が良いでしょう。

それではいよいよ、サーバの起動に入ります。まずは、初期データベースを作成します。PostgreSQL のスーパーユーザでログインし直してください。そして、次のコマンドを実行します。

> su - pgsql
> initdb

このコマンドが成功していれば、/usr/local/pgsql/data の下に、幾つかファイルができているはずです。ここで失敗したら、ユーザ関係のトラブルです。/usr/local/pgsql/data のオーナーが、PostgreSQL のスーパーユーザになっているか、または、そのスーパーユーザが、root グループ(グループ ID が 0 のグループ)に属していないか確認してください。私は、root グループに属していたため、結構ここで悩みました。

いよいよ、サーバの起動です。

> pg_ctl start

うまく起動できたでしょうか。成功したら、「database system is ready」と表示されるはずです。ちなみに、現在 PostgreSQL が実行されているかを調べるには、次のようにします。

> pg_ctl status

ここで、データベースのテストをすることもできます。PostgreSQL のソースのテストディレクトリ(postgresql-7.0/src/test/regress)に入って、ランテストを行います。コンパイルしたユーザと、PostgreSQL のスーパーユーザが違う場合、ここのディレクトリの書き込み権限がないために、実行できないかもしれません。この場合、このディレクトリ以下に、PostgreSQL のスーパーユーザが書き込めるようにパーミッションを変更してしまうというのもひとつの方法です(ちょっと乱暴だけど)。

コンパイルしたユーザで、PostgreSQL のスーパーユーザ(全員にだけど)に書き込み権限を与える
> cd test/regress
> chmod a+w -R .
PostgreSQL のスーパーユーザでランテストを実行
> su - pgsql
> cd test/regress
> make all runtest

テストの結果がすべて ok になれば問題ありませんが、ときどき failed になってしまいます。ただし、float や、geometry などは、表示や、精度の違いのために failed になるので、それほど神経質になる必要はないと思います(いや、精度の違いが起きるのが問題と言えば問題ですけど。まあ OS や CPU に依存する問題ですし)。

PostgreSQL を起動すると、PostgreSQL からのメッセージがやたらと端末に表示されて迷惑です。これをやめるには、pg_ctl start を実行するときに -l ログファイル名 オプションを指定します。一度 PostgreSQL を終了させて、-lオプションをつけて起動しなおしてみましょう。

> pg_ctl stop
> pg_ctl -l /var/log/postgresql.log start

PostgreSQL は、コンピュータが再起動する度に起動する必要があるので、rc.local(RedHat の場合、/etc/rc.d の下にある)などの起動スクリプトに記述しておく方が良いかも知れません。一応例を示しておきます。

echo -n "Starting PostgreSQL: "
su -l pgsql -s /bin/sh -c "/usr/local/pgsql/bin/pg_ctl -l /var/log/postgresql.log start > /dev/null 2>&1" < /dev/null
echo "done."

かなり長かったですが、これで終了です。

戻る