ちょっと物知り博士のちょこっと講座 戻る

第16回 今PostgreSQLが熱い

リレーショナル データベース製品

現在、クライアント サーバ システムで利用する、クライアント サーバ型データベースが RDBMS の大半を占めていますが、「Oracle」「SQL Server」「Sybase」「Informix」「DB2」など、製品名の中に提供元の会社名をデータベース製品として代表させることが多い傾向にあります。バージョンアップとともに製品名の変更を余儀なくされることが多いためでしょうが、各社とも製品の信頼性だけでなく独自性に工夫を凝らしています。
製品名 会社名
Oracle 日本オラクル(株)
Microsoft SQL Server マイクロソフト(株)
Informix Dynamic Server インフォミックス(株)
DB2UDB 日本アイ・ビー・エム(株)
Sybase Adaptive Server サイベース(株)

FREE DATABASE

双璧がなんてったて PostgreSQL と MySQL
SOURCE、BINARY 共にFREEに入手できる
POSTGRES はUCB(カリフォルニア大学バークレー校)でマイケル・ストーンブレーカ教授のもとで開発されたクライアント・サーバ(C/S)型のオブジェクト・リレーショナル・データベース管理システム(ORDBMS) です。

筆者の周りのデータベースの動向

筆者の会社内では、お客様に提供するシステムには必ずデータベースを組み込んでいます。組み込んでいるというよりは、データベースのもとでプログラミングしているといったほうが正確かな。
お客様に提供するシステムですから、当然(今までは)商用のデータベース(弊社では行きがかり上ORACLEとなっています)を組み込んでいます。お客様に提供するシステムは有償ですから、データベースにもお金が掛けられます。
実を言えばマイクロソフトからWINDOWS95が世の中に出てくる前は提供するシステムの基本OSは[MS-DOS] でした。このMS-DOS というOSには筆者の満足する「データベース」は存在していませんでした。MS-DOSにはファイルの入出力用にアセンブラで使用することの出来る入出力関数があっただけでした。そのときに必要だった機能は50、000件程度の「部品仕組み構成」ファイルを部品の仕組み構成順に検索する機能で、これは一からそのシステムを作る必要があったのです。そこで筆者が作成したのが名づけて[IS-DOS] というデータベースもどきのデータ管理ソフトでした。全てアセンブラで作成して、データのキー付き検索、部品仕組み構成を検索が出来る自称「優れもの」でした。
自ら作成したデータベースですから、いくらシステムに組み込もうと、ライセンス料は無しです。ですから、WINDOWSでシステムを作成するようになっても、データベースソフトにはお金を掛けたく無かったのです。本当はmicrosoft にBill Gates 氏に負けたくなかったのです。
が力の差は歴然としていますので泣く泣く有料のデータベースを「買う」ことになったのです。それでもMicrosoftの片棒を担ぐのはいやでしたので、ORACLEになったのです。(実際はWINDOWS98,WINDOWS NT、EXCEL、WORD、ACCEESS・・)とほとんどがMICROSOFTの「有償」のソフトではあったのですが)
パソコンのOSがこのままズーとWINDOWS onlyであったなら多分ORACLEを使いつづけていたでしょう。 しかし、世の中にはやはり筆者と同じように「ケチ」な人がいるのです。とにかくコンピュータソフトに「お金」を掛けたくない。少々使い勝手が悪かろうと、有償のソフトと同等の機能があるならFREEのソフトが使いたい。
FREEのデータベースがあったのです。OSは以前(といっても高々2年足らずですが)からFREEのLINUX を使っていましたから、LINUXで使えて、FREE のデータベースを探していました。LINUX (RedHat) をインストールする際、インストールするパッケージの名前の中に「PostgreSQL」の文字があるのはLINUX を使い出してから何回もインストールする度に見た事がありましたが、「??」と思ってはいたのですが、まさかこんなところにあるとは知りませんでした。
インターネットサイトを「ライセンスフリー データベース」で検索してみると、「PostgreSQL」の名前が見つかりました。記事をあれこれ読んでゆくと「どこかでこの名前見た事があるな」「そうそうRedHat Linux のディストリビューションにあったなー」
RPM なPostgreSQL はインストールは非常に簡単です。Linux のインストールを行うときにインストールパッケージを指定して一緒にインストールできます。 Linuxのインストールは済んでいて追加したいのならCD-ROM から RMP コマンドを用いて簡単にインストールできます。「なーんだ簡単ジャン」
インストールの手順はあんまり簡単なのでわざわざ書くにも及ばないので省略します。
使い方も説明するほどのこともありませんが・・・
@ PostgreSQLに関するいろいろな処理(といってもたくさんはありませんが)は 特権ユーザーとしてpostgres でログインして行う
A インストール直後は
# initdb
を起動すると、temporary1 というスキーマが作成される。
B postgreSQL のコマンドは # pgsql データベーススキーマ名 でデータベースにログインして行う
C postgreSQL の起動は # postmaster & と入力するか
# /etc/rc.d/init.d/postgresql start
と入力します。
ぐらいでしょうか。
PostgreSQL データベースは Linux のWEB プログラムからアクセスする為にインストールしました。 WEBプログラムはPerl CGIで作成しています。したがって、Perl プログラムからアクセスできなければなりません。
一般的に商用データベースでもLICENCE FREE のデータベースでも、アクセスする為の特定の言語を想定していません。一方プログラム言語は特定のデータベースを対象にはしていません。たとえば WINDOWS のVBからORACLE をアクセスするときも、CからDB2 をアクセスするときも、言語とデータベースはそれぞれに相手を特定していません。そこで必要なのが DBC(DataBaseConnectivity)という一種のドライバーが必要になります。
PerlとPostgreSQLの仲立ちをするものが DBI、DBDです
DBIはPerlからデータベースにアクセスするためのアプリケーション・プログラミング・インターフェース(API)です。
DBIは関数、変数、規約などを定義し、使用するデータベースに依存しない一貫性のあるデータベース・インターフェ
ースです。DBI は特定のデータベースをターゲットにして作られていません。そこで必要なソフトが データベース
ごとに作られたDBD(DataBaseDriver)です。
アクセス手順を図式すると

BRAUZA ⇔ APACHE ⇒ CGI プログラム ⇔ (PERL インタプリタ) ⇔ DBI ⇔ DBD ⇔ PostgreSQL
...................................................... ..............................
.........................................................(HTML ドキュメント)

となります。
Perl CGI プログラムから PostgreSQLが使えるようにインストールしてみましょう。
@ LINUX マシンに APACHE、PostgreSQL はインストールされているものとします。

A インターネットサイトから 次のアーカイブをダウンロードします
pgsql_perl5-1.8.1.tar.gz
DBI-1.17.tar.gz
DBD-Pg-0.99.tar.gz
筆者はいずれも http://www.perl.com/CPAN-local/modules/ からダウンロードしました。
B USR ID:postgres の.bashrcの内容 を設定します。 これはPostgreSQLのインストール後に行っておいてください
1. home directory:/home/postgres
2. .bashrc の内容

PATH="$PATH":/usr/local/pgsql/bin

export POSTGRES_HOME=/usr/local/pgsql
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$HOME/data
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
C PGSQL_PERL のインストール
1. login postgres
2. アーカイブの展開
$ gzip -cd pgsql_perl5-1.8.1.tar.gz | tar -xvf -
3. make
$ cd pgsql_perl5-1.8.1

$ perl Makefile.PL
$ make
$ make test
4.インストール
$ su
$ make install
install into /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Pg/Pg.so
が表示されたらOK
D DataBaseInterface のインストール
1. login postgres
2. アーカイブの展開
$ gzip -cd DBI-1.17.tar.gz | tar -xvf -
3. make
$ cd DBI-1.17
$ perl Makefile.PL
$ make
$ make test
4.インストール
$ su
$ make install
E DataBaseDriver のインストール
1. login postgres
2. アーカイブの展開
$ gzip -cd DBD-Pg-0.99.tar.gz | tar -xvf -
3. make
$ cd DBD-Pg-0.99
$ export POSTGRES_INCLUDE=/usr/include/pgsql
$ export POSTGRES_LIB=/usr/lib/pgsql
$ perl Makefile.PL
$ make
$ make test
4.インストール
$ su
$ make install
以上でPerl CGI プログラムからPostgreSQL が使えるようになっています。
早速次のようなサンプルプログラムを作ってブラウザから呼んで見てください。
1 #!/usr/local/bin/perl
2
3 use strict;
4 use DBI;
5
6 my ($dbh, $sth);
7 my ($data_source, $user_name, $sql);
8 my ($id, $name, $zip, $addr, $tel);
9 my ($ary, $num, $i);
10
11 $data_source = 'dbi:Pg:dbname=nippodb';
12 $user_name = 'postgres';
13 $dbh = DBI->connect($data_source, $user_name) || die $dbh->errstr;
14
15 $sql = 'select p_bhc(rtstr('A0001','A0001')) as pbhc, c_bhc(rtstr('A0001','A0001')) as cbhc;'; $ary =
16 $dbh->selectall_arrayref($sql) || die $dbh->errstr; $num = @$ary;
17 for ($i = 0; $i < $num; $i++) {
18 print "$ary->[$i][0], $ary->[$i][1], $ary->[$i][2], ";
19 print "$ary->[$i][3], $ary->[$i][4]\n";
20 }
21
22 $dbh->disconnect();
PostgreSQL は商用のデータベースに比べて日本国内での知名度が低い。多分LICENCE FREEだということが=稚劣 とイメージされているのであろうが、大手企業はもとより、中小のシステムでも取り入れられた例をあまり聞かない。
筆者の事務所では、従業員の日報WEB、名刺管理WEB、情報処理試験WEB等に適用してPerl CGIを通じてアクセスするシステムを作って運用しているが、データのボリューム、複雑さ共に今だ商用DBに比較して云々と言えるところまではいっていないが、今のところ問題なく動作しており取り立てて劣っているようには感じられない。
ただ、ODBC を通じてVBでアクセスするプログラム開発途中、レコードロック解除等の問題が発生しておりこのあたりがWEAKPOINT と言えるのかも知れない。この問題はPERL− DBI,DBD でのWEBプログラムでは発生していない。