ここでは、PostgreSQL 8.0.3をソースからインストールする方法を紹介する。OSインストール時にパッケージとしてインストールされている場合は、あらかじめ削除しておくこと。
1.PostgreSQLの管理ユーザを作成
データベースは通常rootではなく専用のユーザを作り、そのユーザが管理を行う。予めrootでログインし、管理ユーザを作成する。
# useradd postgres
# passwd postgres
(パスワードを設定する)2.PostgreSQL用ディレクトリの作成
PostgreSQLの実行ファイルやデータを格納するディレクトリを作成する。
# mkdir /usr/local/pgsql
# chown postgres.postgres /usr/local/pgsql
前準備が終わったら、インストール作業を行う。ダウンロードサイトよりソースファイルをダウンロードしておくこと。
引き続きrootユーザで作業を行うが、途中でpostgresユーザに切り替えるので注意する。1.PostgreSQLの解凍
用意したPostgreSQLのソースを/usr/local/srcにコピーし、解凍する。
# cd /usr/local/src
# tar zxvf postgresql_8.0.3.tar.gz2.PostgreSQLのコンパイル・make
正常に解凍できたら、コンパイル、makeを行う。
# cd /usr/local/src/postgresql_8.0.3
# ./configure --enable-multibyte=EUC_JP
# make all3.PostgreSQLのインストール
makeでエラーが出なければ、インストール作業を行う。ここからは、先ほど作成した管理者ユーザ
postgresで作業を行う。
# su - postgres postgresユーザになったら、コンパイル、インストールを行う。
$ cd /usr/local/src/postgresql_8.0.3
$ make install
PostgreSQLを動作させるため、管理ユーザpostgresに対して環境変数を設定する。ホームディレクトリ(/home/postgres)配下の
.bashrcファイルをviで開き、"# User specific aliases and functions"という行の下に、以下の行を追加する。
export 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"保存したら、以下のコマンドを実行し、設定を反映させる。
(またはpostgresユーザをログアウトし、再度ログインする)
$ cd /home/postgres
$ source .bashrc
PostgreSQLをインストールした後、データベースの初期化を
一度だけ実行しなければならない。
$ initdb
上記の設定までで、PostgreSQLデータベースが利用できるようになった。しかし、デフォルトの設定では外部からのアクセスを禁止している。つまりインターネットなどのネットワーク経由でのアクセスができないということである。これらを可能にするためには、
/usr/local/pgsql/data/postgresql.confを編集する必要がある。以下、編集する項目を説明する。
- port 5432
- postmasterが使用するポート番号を指定。デフォルトは5432。
- tcpip_socket on/false
- 他のホストからの接続を許可するかどうか。デフォルトはfalse。許可したいので、ここを
onに変更する。- silent_mode on/false
- 端末からpostmasterを切り離し、デーモンとして動かすオプション。デフォルトはfalse。デーモンとして動かしたいので、ここを
onに変更する。上記項目は、すべてコメントアウト(#)されている。設定を有効にするには、コメントをはずさなければならないことに注意。
また、
tcpip_socketをonに設定しただけでは、自ホストからの接続しか許可しない。他からの接続を許可するには、/usr/local/pgsql/data/pg_hba.confファイルの末尾に、以下の行を追加する。
host all all 0.0.0.0 0.0.0.0 trust
PostgreSQLデータベースの起動・停止はpostgresユーザ(initdbを実行したユーザ)で行う。起動・停止はpg_ctlコマンドで行 うことが推奨されている。pg_ctlは7.0で導入されたpostmasterの管理ツールで、postmasterの起動・停止を行う。
起動には、postgresユーザで次のコマンドを実行する
$ pg_ctl -w start コマンド実行後、postmasterが実行可能になるまで待機し、結果を表示する。起動に成功すると、次のようなメッセージが表示される。
waiting for postmaster to start...done
postmaster successfully startedpostmasterを終了させるには、次のコマンドを実行する。
$ pg_ctl stop コマンド実行後、postmasterが終了するまで待機し、結果を表示する。終了に成功すると、次のようなメッセージが表示される。
waiting for postmaster to shut down.....done
postmaster successfully shut downなお、PostgreSQLを利用中のユーザがいると、次のメッセージが表示され、postmasterを終了することができない。
waiting for postmaster to shut down............................... failed
pg_ctl: postmaster does not shut downこの場合、接続中のユーザにログオフしてもらうか、以下のコマンドでpostmasterを強制終了させる。
$ pg_ctl -m f stop しかし、この方法ではトランザクションが強制終了してしまうので、注意しなければならない。
サーバ起動時にpostmasterを自動的に起動させるには、次のように設定する。なお、ここからは
rootで作業を行う。
自動起動用スクリプトがソースに用意されているので、それを/etc/rc.d/init.dにpostgresというファイル名でコピーする。
# cp /usr/local/src/postgresql-7.4.2/contrib/start-scripts/linux /etc/rc.d/init.d/postgres インストール時にデータファイルなどをデフォルトではないディレクトリに配置した場合は、そのようにpostgresファイルを編集する。上記のとおりインストールをしているなら、編集は必要ない。
作成したファイルに実行権をつけ、シンボリックリンクを張る。
# chmod 755 /etc/rc.d/init.d/postgres
# chkconfig --add postgresサーバを再起動し、動作を確認しよう。なお、手動での起動、停止は次のように行う。
# /etc/rc.d/init.d/postgres start ・・・起動
# /etc/rc.d/init.d/postgres stop ・・・停止
PostgreSQLにアクセスするプログラムの多くは、共有ライブラリ「libpq」を呼び出して使用している。そのため、libpqが何処にあるのか を設定する。Red Hat系のディストリビューションの場合、/etc/ld.so.confファイルをviで開き、以下の行を追加する。
なお、この作業はrootで行う。
/usr/local/lib
/usr/local/pgsql/lib設定を保存し、反映させる。
# ldconfig
PostgreSQLが使えるようにはなったが、このままではApacheからデータベースが利用できない。ApacheとPHP、PostgreSQLを組み合わせてWeb-DBMS連携システムを構築するには、Apacheの実行ユーザである
nobodyをPostgreSQLのユーザとして登録しなければならない。
PostgreSQLのユーザ登録は、DB管理者であるpostgresユーザで行う。なお、ユーザ登録時にたずねられる質問には全て「n」と答える。
$ createuser nobody
Shall the new user be allowed to create databases?(y/n)n
Shall the new user be allowed to create more new users?(y/n)n
CREATE USERこれで、PostgreSQLのユーザとしてApacheの実行ユーザ「nobody」が登録された。