comドメイン2年間無料!C言語チャット 無料!

Postgre SQL
●CGIとデータベース(RDB)
●CGI+PostgreSQL
●PostgreSQLのインストール
●DBI/DBDのインストール
●ユーザー/データベースの作成/テスト
●CGIテスト
●パスワード制限

●CGIとデータベース
掲示板やサーチエンジン等、CGIプログラムは主にテキストデータの処理を目的としています。CGIプログラムを設計する際、データをどのように保存するかという点が大きな問題となります。
フリーウェアやシェアウェア等、一般配布を目的としたCGIプログラムの場合は汎用性や設置の手軽さを考えてフラットファイル(普通のテキストファイル)を採用している場合がほとんどです。
データの記録にフラットファイルを採用した場合、前途のように扱いが容易で汎用性に優れている反面

1.キャパシティー(データを保存できる容量)
2.データ保護(同時書き込みによるデータの破損)
3.処理速度(データ量が多くなるに従い処理速度がどんどん遅くなる)

等の不利な点が数多くあります。特に2に関しては掲示板のログが頻繁に消えて困った経験されたかたも多いのではないでしょうか。

これら多くの問題はデータの記録に「データベース」を利用することで解決できます。
「データベース」とはさまざまなデータを格納するためのソフトウェアで、一口にデータベースと言っても「カード型」「ツリー型」「リレーショナル型」等、さまざまなタイプがあります。
中でも昨今で標準となった感のあるのが「リレーショナル型データベース(RDB)」で、 オラクル、SQLserver、MS Access 等の市販RDB、PostgreSQL、MySQL 等フリーのRDBが存在しています。

このページで取り上げている PostgreSQL(ポストグレス あるいは ポストグレエスキューエルと呼ばれています) はフリーでありながら、非常に高性能であり数多くのサイトで実績のあるRDBです。

●CGI+PostgreSQL
CGIのデータ記録にPostgreSQLを利用すれば多くの利点があることはわかりましたが、実際にCGI+PostgreSQLを使うためには次のような環境が必要となります。

1.PostgreSQLがインストールされていること
2.DBI/DBDモジュールがインストールされていること

ホームページを作っている多くのユーザーは一般のプロバイダや無料ホームページスペースを利用していることが多いと思いますが、多くはこの条件に当てはまらないと思います。その場合は残念ながらCGI+PostgreSQLを利用することは出来ません。

ただ、最近では 安価でCGI+PostgreSQL が利用できるレンタルサーバーが増えてきていますし、 専用サーバーサービスを利用していたり、自前でサーバーを立てている場合は1からインストールすることも可能です。このような環境をお持ちの方は CGI+PostgreSQLにぜひ挑戦してみて下さい。


SOHO向けレンタルサーバー、グループ運用可、大容量低価格!

低価格で高品質サーバーをお探しの方はWISNET!

●PostgreSQLのインストール
ここでは LinuxシステムへPostgreSQL7.1をインストールする方法を解説します。Linux以外でもUNIX系OSにインストールする場合はほぼ同じですので参照して下さい。
*HTTPサーバー及びPerlはすでにインストールされていることを前提としています。

1.ソースコードの入手
ftp://ftp.jaist.ac.jp/pub/dbms/PostgreSQL/source/v7.1/postgresql-7.1.tar.gz にアクセスしてソースコードをダウンロードします。

2.インストールの下準備
RedHat系などのシステムではすでにRPMパッケージのPostgreSQLがインストールされている場合があります。RPMパッケージのPostgreSQLがインストールされているとソースコードのコンパイルがうまくいかない場合があるのでこれを削除しておきます。

# rpm -aq | grep post

と入力して何か表示されたら PostgreSQLのパッケージが入っているので

# rpm -e 表示されているパッケージ名

として削除して下さい。

3.専用アカウント/ディレクトリの作成
PostgreSQLのインストールは root では行えないので 専用アカウントを作成して(慣例的に postgres )行います。

# useradd postgres

インストール作業は作成した postgresユーザーで行うため 専用ディレクトリを作成し、 ディレクトリのオーナーを変更します。

# mkdir /usr/local/pgsql
# chown postgres /usr/local/pgsql
# mkdir /usr/local/pgsql/src
# chown posgtres /usr/local/pgsql/src

4.インストール
ソースファイル(postgresql-7.1.tar.gz)は先ほど作成した /usr/local/pgsql/src に置いてください。
インストールは postgresユーザーで行います。(//以降はコメントです)

# su - postgres
$ cd /usr/local/pgsql/src
$ tar xfvz postgresql-7.1.tar.gz
 // ソースファイルが展開されます。
$ cd postgresql-7.1
$ ./configure --enable-multibyte=EUC_JP
$ make
$ make check
 // All 76 tests Passed. と表示されれば問題ありません。
 // システムによってはいくつかの警告が表示される場合がありますが問題ない場合が多いようです。
$ make install
 // インストール完了。

5.環境設定
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

を実行してください。 6.データベースクラスタの作成
データベースクラスタの作成は必ず postgresユーザーで行ってください。

$ initdb

を実行します。実行後環境変数 PGDATA で指定されたディレクトリをデータベースクラスタとしてセットアップします。

6.デーモンの起動
PostgreSQLを利用するには postmaster というデーモンを起動しておく必要があります。 postmasterの起動は必ず postgresユーザーで行ってください。

$ postmaster &

以上で PostgreSQLのインストール/設定は完了です。

●DBI/DBDのインストール
CGIからPostgreSQLを利用する場合、DBI/DBDモジュールのインストールが必要です。

1.ソースコードの入手

【DBI】
http://search.cpan.org/search?dist=DBI
【DBD】
http://search.cpan.org/search?module=DBD::Pg

2.DBIのインストール

インストールの順番は、必ずDBIを先に行います。DBDインストレーションのテストを行うときにDBIが必要となるためです。
例ではソースコードの展開、コンパイルは一般ユーザー、インストールは rootで行うようにしています。ソースコードを置くディレクトリは実際のパスに読み替えてください。

$ su - 一般ユーザー
$ cd /usr/home/mydir/src
 // 実際のパスに読み替えてください。
$ tar xvzf DBI-1.15.tar.gz
$ cd DBI-1.15
$ perl Makefile.PL
$ make
$ make test

$ su -
Password: ******
# cd /usr/home/mydir/src/DBI-1.15
 // 実際のパスに読み替えてください。
# make install

2.DBDのインストール

続いてDBDのインストールを行います。DBDのインストールにあたっては postmaster(デーモン)を起動しておいてください。

$ su - 一般ユーザ
Password: *****
$ cd /usr/home/mydir/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

$ su -
Password: *****
# cd /usr/home/mydir/src/DBD-Pg-0.95
 // 実際のパスに読み替えてください。
# make install

以上で DBI/DBDのインストールは完了です。

●ユーザー/データベースの作成/テスト
インストールが完了した時点では 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です。

それでは実際にデータベースに接続してテストを行ってみましょう。
例として次のような簡単なアドレス帳データを登録してみます。

nameemail
MOGmog@***.***.com
JONjon@***.***.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

と入力します。

●CGIテスト
PostgreSQL、DBI/DBDのインストールも終わり、テストデータベースの用意もできました。今度はCGIを使ってテストデータベースに接続してみます。

1.上記ソースコードをコピー&ペースとして適当なファイル名(dbtest.cgi等)を付けて保存してください。
2.保存したファイルをサーバーにアップロードしてパーミッションを<755>に変更してください。
3.ブラウザでアップロードしたファイルにアクセスして下さい。画面が表示されれば成功です。

■エラーとなる場合
CGIがエラーとなる場合はPerlパスやパーミッションの設定ミス以外にPostgreSQLのライブラリパスがシステムに通っていない事が考えられます。
その場合は、/etc/ld.so.conf ファイルに

/usr/local/pgsql/lib

行を追加した後

/sbin/ldconfig -v

コマンドを実行してください。
*この作業はrootで行います。

●パスワード制限
先のテスト例ではデータベースにパスワードが設定されていませんでしたが、実際に運営する際にはパスワードの設定が望まれます。データベース testdb にパスワードを設定するには次のように行います。

1.testdbとの接続
postgresユーザーでtestdbに接続します。

$ psql testdb

ユーザー testuser の接続に対してパスワードを設定します。

testdb=> ALTER USER testuser WITH PASSWORD 'mypassword';

パスワード mypassword は独自のパスワードに変更してください。

2.pg_hba.confの編集
データベースに設定したパスワードを有効にするためには pg_hba.confの編集が必要です。
/usr/local/pgsql/data/pg_hba.conf を次のように編集します。

# This default configuration allows any local user to connect as any
# PostgreSQL username, over either UNIX domain sockets or IP:

local testdb                                     crypt
host  testdb    127.0.0.1  255.255.255.255       crypt
local all                                        trust
host  all       127.0.0.1  255.255.255.255       trust   

3.パスワードテスト
パスワードが有効になっているか確認します。

$ export PGUSER=testuser
$ psql testdb

Password:

とパスワード入力プロンプトが表示されればOKです。先ほど設定したパスワードを入力し、ログインしてください。

4.CGIからのパスワードテスト
先ほどテストしたCGIにブラウザで再度アクセスしてみて下さい。先ほどは正常に表示されたとしても今度はエラー表示になってますよね?(キャッシュが表示されているかもしれないので再読込して下さい)これは、データベースにパスワードを設定したにもかかわらずCGI中ではパスワードを指定していないので当然です。
そこで、CGI中でもパスワードを指定して再度試してみましょう。

$DB_pwd = '';

CGIソース中のこの箇所にパスワードを記述します。

例:
$DB_pwd = 'mypassword';

編集したCGIソースファイルをサーバーにアップロードしブラウザで再びアクセスしてください。今度は正常に表示されましたか? 表示されれば完了です。

推奨ブラウザ : IE5 / NN4 以上
Copyright (C)1998-2002 MOG - Takehiro.Kitazaki reserved. On Sep 6, 1998, start
制作 : 北崎 剛宏