PostgreSQLの設定

PostgreSQLでDBサーバを構築する。LOCUS社の 「Linux/FrssBSD SQLデータベース構築入門(PostgreSQL6.4.2+PHP3編)」 という本を参考にした。
RedHat Linux6.1にパッケージされてるPostgreSQLは6.5.2なので、ちょっと困ったけど、 なんとかなった。
ここでは、この本を中心に説明する。

まず、インストールだが、当然RedHat LinuxをインストールしたときにPGSQLも インストールされているので必要ない。さらにpostgresユーザも作成されている
ということで、実際に行うのは環境設定からだ。

その前に、ユーザはpostgresでログインする。PGSQLに限らず、DBサーバは通常、 rootとは別にDBサーバを管理するユーザを必要とする。別にrootでもいいんだろうけど、 実際、別のユーザを使ったほうがいろいろと便利である。だから、DBサーバに関することは ほとんどデータベース用管理ユーザで行う。

  1. 環境変数の設定

    PostgreSQLを動作させるために、環境変数の設定を行う。

    1. .bashの環境設定

      環境変数の設定は、postgresユーザとしてログインしたときに自動実行 される.bash_profileで行う。ホームディレクトリからvi.bash_profileを開き、次の行を追加する。

      export POSTGRES_HOME=/usr
      export PGLIB=$POSTGRES_HOME/lib/pgsql
      export PGDATA=$POSTGRES_HOME/data
      export MANPATH="$MANPATH":$POSTGRES_HOME/man
      export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"

      参考書では、先頭に「export PATH="$PATH":/usr/bin」 という行があるが、マシン起動時に既にパスが通っていたので、設定しなかった。
      また、PGSQLのホームディレクトリも参考書では「/usr/local/pgsql」 になっているが、これは自分でデフォルトの設定でコンパイル・インストール した場合のパスであり、RedHat Linuxをインストールするときに一緒にインストール した場合はこちらのパスになってた。このパスを探すのに苦労しました。(>_<)
      編集後は、sourceコマンドで変更を反映させる。

      # source .bash_profile

      ちなみに、ログインしなおしてもOK。

    2. データベースを初期化

      envコマンドで環境変数が正しく設定されていることを確認したら、 一度だけ「データベースの初期化」を行う。データベースの初期化には 「initdb」コマンドを使用するが、このままではエラーが出てしまう。
      なぜなら、環境変数でPGDATA=$POSTGRES_HOME/dataと指定しているが、 このdataディレクトリが存在しないからである。そこで/usrdataディレクトリを 作成するのだが、ここはroot権限がないと作れないのでsu -でスーパーユーザになり、 ディレクトリを作成後、

      # chown postgres.postgres /usr/data

      を実行してpostgresユーザがdataディレクトリを使えるようにする。
      そのあとに、

      # initdb

      を実行する。

      逆に、このPGDATAの設定を変えることにより、任意のディレクトリや ハードディスクにデータベースのデータを格納することができる。サーバの 付加分散を考えるなら、別のハードディスクに作成したほうがいいだろう。
      (今気が付いた・・・)

  2. PostgreSQLの起動

    PostgreSQLを起動する。

    1. pg_hba.confの設定

      PostgreSQLはデフォルトの設定では、クライアント(他のホスト)から データベースへのアクセス要求があっても一切答えないようになっている。 これでは動的なwwwページが作れないので、アクセス要求にこたえるように設定を 変更する。
      pg_hba.confは初期状態ではReadOnlyになっているため、 パーミッションを変更する。

      # cd /usr/lib/pgsql/data
      # chmod 600 pg_hba.conf

      次にこのファイルをviで開き、次の行を探す (似たような行が複数あるので注意!)。

      #host all 0.0.0.0 0.0.0.0 trust

      この行のコメントをはずして、保存する。

    2. postmasterを起動

      次のようにコマンドを実行すれば、postmasterが起動する。

      # postmaster -S -i

      起動を確認するには、psコマンドを使う。

      # ps x

      出てきたデータの中に

      /usr/bin/postmaster -S -i

      という行があればOK。

    3. サーバ起動時にpostmasterを起動する。

      postmasterを起動するスクリプトをサーバの起動時に自動的に実行する ように設定する。
      suコマンドでrootになり、/etc/rc.d/rc.localファイル に次のようなスクリプトを追加する。

      # rm /tmp/.s.PGSQL.*
      # su - postgres -c "/usr/local/pgsql/bin/postmaster -S -i"

      サーバを再起動し、postmasterが起動しているかどうかを確認しましょう。

  3. PostgreSQLユーザの登録

    LinuxのユーザがクライアントマシンからODBC経由でPostgreSQLが管理する データベースにアクセスするためには、そのユーザをPostgreSQLのユーザデータベース に登録しておく必要がある。
    PostgreSQLのユーザデータベースへの登録はpostgresアカウントでログインし、 「createuser」コマンドを使って行う。この辺は参考書のとおりで問題なく出来た。

これで、PostgreSQLが使えるようになった。後はPostgreSQL上にデータベースを作成し、 WebやAccessなどから利用するだけである。これらの設定は別ページで解説する。