このメモは、RedHat7.1で作成しました。他のLinuxでも問題ないとは思いますが、 SolarisやBSD系のUNIXでは、必ずしも成功するとは限りません。
PostgreSQLは専用のスーパーユーザが必要となるので、postgresというユーザを作成する。
別のユーザ名でも問題はないが、標準はpostgresというユーザ名になっている。
# adduser postgres # mkdir /usr/local/pgsql # chown postgres:postgres /usr/lcoal/pgsql
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"
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
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
インストールした直後の設定では、ブラウザから見ようとしてもポート番号を指定しないと見えないので、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
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
設定ファイルのコピーとライブラリの読み込み。(このあたりが、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から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から、国際化モジュールの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 restart2001/07/16追加
使えると結構便利かもしれないので書いてみました。これでトリガなどを使った柔軟な処理が出来るようになります。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追加