1.CGIとデータベース(RDB)
2.CGI+PostgreSQL
3.PostgreSQLのインストール
4.DBI/DBDのインストール
5.ユーザー/データベースの作成/テスト
6.CGIテスト
7.パスワード制限
1.CGIとデータベース
掲示板やサーチエンジン等、CGIプログラムは主にテキストデータの処理を目的としています。CGIプログラムを設計する際、これらのデータをどのように保存するかという点が大きな問題となります。
フリーウェアやシェアウェア等、一般配布を目的としたCGIプログラムの場合は汎用性や設置の手軽さを考えてフラットファイル(普通のテキストファイル)を採用している場合がほとんどです。
データの記録にフラットファイルを採用した場合、扱いが容易で汎用性に優れている反面
・ キャパシティー(データを保存できる容量)
・ データ保護(同時書き込みによるデータの破損)
・ 処理速度(データ量が多くなるに従い処理速度がどんどん遅くなる)
等の不利な点が数多くあります。特に2に関しては掲示板のログが頻繁に消えて困った経験されたかたも多いのではないでしょうか。
これら多くの問題はデータの保存先として「データベース」を利用することで解決できます。
「データベース」とはさまざまなデータを格納するためのソフトウェアで、一口にデータベースと言っても「カード型」「ツリー型」「リレーショナル型」等、さまざまなタイプがあります。
中でも昨今標準となった感のあるのが「リレーショナル型データベース(RDB)」で、オラクル、SQLserver、MS Access 等の市販RDB、PostgreSQL、MySQL 等フリーのRDBが存在しています。
このページで取り上げている PostgreSQL(ポストグレス あるいは ポストグレエスキューエルと呼ばれています) はフリーでありながら、非常に高性能であり数多くのサイトで実績のあるRDBです。
2.CGI+PostgreSQL
ここでは LinuxシステムへPostgreSQL7.1.3をインストールする方法を解説します。Linux以外でもUNIX系OSにインストールする場合はほぼ同じですので参照して下さい。
*HTTPサーバー及びPerlはすでにインストールされていることを前提としています。
a.ソースコードの入手
postgresql-7.1.3.tar.gz ソースコードをダウンロードします。
b.インストールの下準備
RedHat/Vine系などのシステムではすでにRPMパッケージのPostgreSQLがインストールされている場合があります。RPMパッケージのPostgreSQLがインストールされているとソースコードのコンパイルがうまくいかない場合があるのでこれを削除しておきます。
# rpm -aq | grep post
と入力して何か表示されたら PostgreSQLのパッケージが入っているので
# rpm -e 表示されているパッケージ名
として現在インストールされているパッケージを削除して下さい。
c.専用アカウント/ディレクトリの作成
PostgreSQLのインストールは 専用アカウントを作成して(慣例的に postgres )行います。
# useradd -d /usr/local/pgsql postgres
# chmod 711 /usr/local/pgsql
インストール作業は作成した postgresユーザーで行うため ソースコードを置くディレクトリを作成します。
# su - postgres // postgreユーザーになる
$ cd
$ mkdir src // srcディレクトリ作成
d.インストール
ソースファイル(postgresql-7.1.3.tar.gz)は先ほど作成した /usr/local/pgsql/src に置いてください。
インストールは 必ずpostgresユーザーで行います。(//以降はコメントです)
# su - postgres // postgreユーザーになる
$ cd /usr/local/pgsql/src
$ tar xfvz postgresql-7.1.3.tar.gz // ソースファイルが展開されます。
$ cd postgresql-7.1.3
$ ./configure --enable-multibyte=EUC_JP
$ make
$ make check // All 76 tests Passed. と表示されれば問題ありません。
$ make install // インストール完了。
e.環境設定
PostgreSQLを試用するために必要な環境を設定します。以下は bashを使用している例です。 ~postgres/.bashrc に以下の行を追加します。
PATH="$PATH":/usr/local/pgsql/bin
PG=/usr/local/pgsql
export PGLIB=$PG/lib
export PGDATA=$PG/data
export MANPATH="$MANPATH":$PG/man
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
編集終了後
$ source ~postgres/.bashrc
を実行し変更を反映させます。
f.データベースクラスタの作成
データベースクラスタの作成は必ず postgresユーザーで行ってください。
$ initdb
を実行します。実行後環境変数 PGDATA で指定されたディレクトリをデータベースクラスタとしてセットアップします。
g.起動スクリプトの作成と起動
以下のコードをコピーして、起動スクリプト /etc/rc.d/init.d/postgres ファイルを作成します。
作成後 パーミッションの変更を行います。
# chmod 755 /etc/rc.d/init.d/postgres
PostgreSQLの起動と自動起動設定を行います。
# serivce postgres start
# chkconfig postgres on
以上で PostgreSQLのインストール/設定は完了です。
4.DBI/DBDのインストール
CGIからPostgreSQLを利用する場合、DBI/DBDモジュールのインストールが必要です。
a.ソースコードのダウンロード
【DBI】DBI-1.15.tar.gz
【DBD】DBD-Pg-0.95.tar.gz
b.DBIのインストール
インストールの順番は、必ずDBIを先に行います。DBDインストレーションのテストを行うときにDBIが必要となるためです。
DBI/DBDのインストールは PostgreSQLとは違い rootで行います。ソースコードを置くディレクトリは実際のパスに読み替えてください。
# cd /usr/local/src
// 実際のパスに読み替えてください。
# tar xvzf DBI-1.15.tar.gz
# cd DBI-1.15
# perl Makefile.PL
# make
# make test
# make install
c.DBDのインストール
続いてDBDのインストールを行います。DBDのインストールにあたっては postgres を起動しておいてください。
# cd /usr/local/src
# tar xvzf DBD-Pg-0.95.tar.gz
# cd DBD-Pg-0.95
# export POSTGRES_LIB=/usr/local/pgsql/lib
# export POSTGRES_INCLUDE=/usr/local/pgsql/include
// 上記exportを忘れるとMakefile.PLがエラー終了します。
# perl Makefile.PL
# make
# export PGUSER=postgres
# make test
# make install
以上で DBI/DBDのインストールは完了です。
5.ユーザー/データベースの作成/テスト
インストールが完了した時点では PostgreSQLを利用できるのはpostgresユーザーだけですが、PostgreSQLのスーパーユーザーであるpostgresユーザーでデータベースを利用するのはあまり好ましくありません。
そこでテスト用のユーザ及びデータベースを作成しそれを用いてテストを行うことにします。ここでは testuser という名前でユーザー、testdbという名前でデータベースを作成してみます。
$ cd /usr/local/pgsql/bin
$ createuser testuser
Shall the new user be allowed to create databases? (y/n)
Shall the new user be allowed to create more new users? (y/n)
この質問は作成するユーザーに「データベースを作成する権限を与えるか」「ユーザーを作成する権限を与えるか」というような意味で、それぞれ n と答えておいてください。
CREATE USER
と表示されればOKです。
続いてデータベースを作成します。
$ createdb testdb
CREATE DATABASE
と表示されればOKです。
それでは実際にデータベースに接続してテストを行ってみましょう。
例として次のような簡単なアドレス帳データを登録してみます。
| name | email |
| MOG | mog@***.***.com |
| JON | jon@***.***.net |
シェル上(コマンドライン)からデータベースを操作するためには PostgreSQLに付属の
psql を利用します。
$ psql [データベース名] とすることでデータベースに接続できます。
$ export PGUSER=testuser
// 先ほど作成したtestuserになります。
$ psql testdb
// testuserでtestdbデータベースに接続します。
testdb=>
上記のようなプロンプトが表示されればSQL文を記述してデータベースの操作を行います。
■テーブルの作成
上記のアドレス帳データを登録するため新たな表(テーブル)を作成します。
テーブルの名前は addrlist 、テーブル内の要素は name(名前)と email (メールアドレス)とします。
testdb=> CREATE TABLE addrlist (
testdb(> name TEXT,
testdb(> email TEXT
testdb(> );
SQL文は ;(セミコロン)までを1つの文と解釈されます。上記の例では4行に分けて記述していますが、1行で書いても同じです。
// SQLについて説明しだすとそれだけで膨大な情報となってしまうので割愛させていただきます。スイマセン! 詳しくは解説書等を参照して下さい。
CREATE
と表示されればOKです。
テーブルの中身をのぞいてみましょう。
testdb=> SELECT * FROM addrlist;
とすれば
name | email
------+-------
(0 rows)
と表示されるはずです。まだ中身は空の状態です。
それでは実際にデータを登録してみましょう。
INSERT INTO addrlist VALUES ('MOG','mog@***.***.com');
INSERT INTO とはテーブルに新たにデータを挿入するSQL文です。
それでは、再度テーブルの中身を見てみます。
testdb=> SELECT * FROM addrlist;
name | email
------+-----------------
MOG | mog@***.***.com
(1 row)
テーブル内にデータが登録されているのがわかりますね。
続けてデータを登録してみましょう。
INSERT INTO addrlist VALUES ('JON','jon@***.***.net');
中身を見ると
testdb=> select * from addrlist;
name | email
------+-----------------
MOG | mog@***.***.com
JON | jon@***.***.net
(2 rows)
登録されていますね。
psqlを終了するには
testdb=> \q
と入力します。
6.CGIテスト
PostgreSQL、DBI/DBDのインストールも終わり、テストデータベースの用意もできました。今度はCGIを使ってテストデータベースに接続してみます。
|