PostgreSQL+PHPのインストールメモ

一応、注意など。

 このメモは、RedHat7.1で作成しました。他のLinuxでも問題ないとは思いますが、 SolarisやBSD系のUNIXでは、必ずしも成功するとは限りません。

postgresユーザの作成

PostgreSQLは専用のスーパーユーザが必要となるので、postgresというユーザを作成する。

別のユーザ名でも問題はないが、標準はpostgresというユーザ名になっている。

 # adduser postgres
 # mkdir /usr/local/pgsql
 # chown postgres:postgres /usr/lcoal/pgsql

postgres の環境変数に以下を追加

bashを使用している場合は、~/.bashrc に以下を追加。csh系を使っている場合は、setenvを使用してください。

まあ、Linuxを使っている人はbashを使っていることが多いと思いますが。

  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"

PostgreSQL-7.1.2のコンパイルとインストール

http://www.postgresql.orgからソースを入手してください。

それから、postgresユーザで実行した方が手間が減ります。

 $ tar zxvf postgresql-7.1.2.tar.gz
 $ cd postgresql-7.1.2
 $ ./configure --enable-multibyte=EUC_JP
 $ make
 $ su
 # make install
 # make install-all-headers
 # cd doc
 # make install

データベース初期化、起動

データベースを初期化して、PostgreSQLを起動します。createuserで2つほど質問されますが、nを選んでおきましょう。起動時に [ -l logfile ] というオプションを入れておくと、ファイルにデバッグログを残しておいてくれます。createuser はpostmasterが起動した状態でないと実行できません。

 # su - postgres
 $ initdb -D /usr/local/pgsql/data
 $ pg_ctl -D /usr/local/pgsql/data -l logfile start
 $ createuser nobody
   n
   n

データベースのテスト

データベースに問題がないかテストします。一部失敗しても問題はないそうです。ちなみに、postgresで実行しないと失敗します。

 $ cd postgresql-7.1.2/src/test/regress/
 $ make all runtest

Apache-1.3.20のコンパイルとインストール

phpを使用できるようにconfigureオプションに--enable-module=soを入れてコンパイルします。

 $ tar zxvf apache_1.3.20.tar.gz
 $ cd apache_1.3.20
 $ ./configure --enable-module=so
 $ make
 $ su
 # make install

Apacheの設定ファイルの編集と起動

インストールした直後の設定では、ブラウザから見ようとしてもポート番号を指定しないと見えないので、httpd.confを編集して、最低でも、ポート番号を書き換えます。あと、ServerNameも書いておいたいいかもしれません。

apachectlの引数にconfigtestでhttpd.confの記述に間違いがないか確認。startで起動します。

 # vi /usr/local/apache/conf/httpd.conf

httpd.conf
---------------------------------------------------
Port 8080 --> Port 80
---------------------------------------------------

 # /usr/local/apache/bin/apachectl configtest 
 # /usr/local/apache/bin/apachectl start

PHP-4.0.5のコンパイルと起動

configureオプションが多いのが問題かも。オプションについては、./configure --help で確認してから、必要なものを入れた方がいいです。

以下のオプションでも大丈夫だと思いますが、問題がないとは限りません。(configureのオプションは一行で書いた方が安全です。)

 $ tar zxvf php-4.0.5.tar.gz
 $ cd php-4.0.5
 $ ./configure \
    --with-apxs=/usr/local/apache/bin/apxs \
    --without-mysql \
    --with-pgsql=/usr/local/pgsql \
    --enable-track-vars \
    --enable-trans-sid
 $ make
 $ su
 # meke install

phpの設定

設定ファイルのコピーとライブラリの読み込み。(このあたりが、Linuxとその他のOSでは違うことが多いです。

FreeBSDでは、/etc/ld.so.confはなかったりします。)

 # cp php.ini-dist /usr/local/lib/php.ini
 # /sbin/ldconfig /usr/local/pgsql/lib/

o /etc/ld.so.confに以下の行を追加
-----------------------------------------------------
/usr/local/pgsql/lib
-----------------------------------------------------

 # /sbin/ldconfig

Apache, PostgreSQL 起動

Apacheからphpを使用できるように設定します。/etc/rc.d/rc.local などの起動スクリプトにしたの2行を追加しておくと、起動時にPostgreSQLとApacheが起動します。

 # vi /usr/local/apache/conf/httpd.conf

httpd.conf
-----------------------------------------------------
#
# 365行目付近(index.phpを追加)
#
<IfModule mod_dir.c>
    DirectoryIndex index.html index.php
</IfModule>
#
# 765行目付近(コメントアウトをはずす)
#
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
-----------------------------------------------------

 # /usr/local/apache/bin/apachectl configtest
 # su - postgres -c "/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start"
 # /usr/local/apache/bin/apachectl start

PHP-4.0.6とマルチバイト正規表現モジュールのコンパイル

PHP-4.0.6から、国際化モジュールのmbstringが含まれるようになったようなので、以前のように、jstringモジュールを入れる必要はないそうです。

ただ、マルチバイト正規表現モジュールは含まれていないので、必要な場合は、以下のようにしてコンパイルできます。ただし、buildconfを使用するときに、 automake,autoconf,libtoolがないとconfigureが生成できなくなります。

linux関係では、開発ツールと一緒に入っていると思いますが、FreeBSDなどでは、インストールする必要があると思います。

 $ tar zxvf php-4.0.6.tar.gz
 $ cd php-4.0.6/ext
 $ tar zxvf php4_mbregex-1.2.tar.gz
 $ cd ..
 $ rm configure
 $ ./buildconf
 $ ./configure --with-apxs=/usr/local/apache/bin/apxs \
    --without-mysql \
    --with-pgsql=/usr/local/pgsql \
    --enable-track-vars \
    --enable-trans-sid
    --enable-mbstring \
    --enable-mbregex
 $ make
 $ su
 # meke install
 # cp /usr/local/lib/php.ini /usr/local/lib/php.ini.old
 # cp php.ini-dist /usr/local/lib/php.ini
 # /usr/lcoal/apache/bin/apachectl restart
2001/07/16追加

PL/pgSQL

使えると結構便利かもしれないので書いてみました。これでトリガなどを使った柔軟な処理が出来るようになります。PHP側でも、同じような処理が出来ることも多いので、処理が2重になる可能性がありますので、気をつけた方がいいと思いますが。

o PL/pgSQLを使うには

  postgresユーザで

    $ /usr/local/pgsql/bin/createlang plpgsql template1
                                              ^^^^^^^^^PL/pgSQLを使用するデータベース
  を実行。
  その後、データベースを作成。

  template1にインストールした場合、その後に作成されたデータベースで自動的に使用できる。


o PL/pgSQLの構文

CREATE FUNCTION 関数名() RETURNS OPAQUE AS '
  BEGIN

    /* 処理内容を記述 */

  END;
' LANGUAGE 'plpgsql';


o PL/pgSQLでトリガを作成

CREATE TRIGGER 関数名 BEFORE INSERT OR UPDATE ON テーブル名
  FOR EACH ROW EXECUTE PROCEDURE 関数名();


o PL/pgSQLとトリガの例

CREATE TABLE test(
  id int4,
  last_date timestamp
);

CREATE FUNCTION update() RETURNS integer AS '
  BEGIN
    NEW.last_date := ''now'';
    RETURN NEW;
  END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER update BEFORE INSERT OR UPDATE ON test
  FOR EACH ROW EXECUTE PROCEDURE update();
2001/08/18追加

戻る
LastUpdate 2000/09/09