初出:SoftwareDesign 1999/1月号 「特集 オープンソース時代のデータベース活用法 PostgreSQL徹底解説」

『PostgreSQL ORDBMS』
						くわむらじゅん
						JuK@YOKOHAMA.Email.Ne.jp

1. PostgreSQLの歴史

  オープンソースのオブジェクト・リレーショナ
ルデータベース・マネージメントシステム(ORDBMS)
として最近脚光を浴びてきましたPostgreSQLですが、
意外にもその源流は1970年代、IBMのSYSTEM-Rと共
にRDMSの実装の草分けとなったUniversity INGRES
にありました。

1970       1980        1990                         1997

  INGRES(UCB) -> Ingres(RT)                    -> IngresII(CA)

		POSTGRES(UCB) -> ILLUSTRA(IIT) -> Universal Server(Informix)
		             |
		             `-> Postgres95(UCB) -> PostgreSQL(postgresql.org)


(1) INGRES

 Edgar F. Codd博士がリレーショナルデータベー
スの元となるリレーショナルデータモデルを提案
したのは1970年でした。集合論に立脚し、二次元
の表の集まりのようなもの(リレーションセット)
をデータベース(データバンクと呼ばれていまし
た)と考えたのでした。それから、数年を経てその
データベースの管理系:リレーショナルデータベー
スマネージメントシステム(RDBMS)の実装が世の
中に出てきました。その一つがカリフォルニア大
学バークレー校(UCB)で開発されたINGRES
(INteractive Graphics and REtrieval System)
でした。Michael Stonebraker教授はINGRESの開発
を当時脚光を浴び始めたマルチタスクOSのUNIX上
で行ないました。INGRESはQUEL(Query Language)
という言語を用いました。[1]
 INGRESは1980年頃にはほぼ完成し、リレーショ
ナルテクノロジー社がIngresとして商用化(*2)し
ましたので、これと区別をするためにUniversity
INGRESと呼ばれています。University INGRESは
もともとシングルユーザ向けに開発されました。
Version8では共有のためのロック機構もありまし
たが、実際にはあまり役に立ちませんでした。ま
た、英語しか使えないことも、データベースに日
本語を保存したい我々にとってはいまひとつ魅力
に欠ける点でした。

(*2) 現在はコンピュータアソシエイツ社から
Ingres IIが出荷されていてLinux版もあります。
(http://www.caj.co.jp/products/ingres_j.htm)


(2) POSTGRES

 1986年、Stonebraker教授は新たなプロジェクト
で全く新しい発想と実装によるオブジェクト指向
の拡張RDBMSの基礎技術の研究を始めました。そ
れがPOSTGRESでした。言語にQUELの流れを汲む
PostQUELを使いました。POSTGRESは、あまりにも
多くの新しいこと(を盛り込もうとしたためか、な
かなか安定しては動かなかったようです。1994年
にPOSTGRESリリース4をもってプロジェクトは終
了しました。Stonebraker教授はPOSTGRES開発で
培った技術をILLUSTRAと言うオブジェクトリレー
ショナルDBMS(ORDBMS)としてIllustraインフォメー
ションテクノロジーズ社にて商用化しました(*3)。
ユーザ定義関数の組み込みが可能であることは、
オブジェクトリレーショナルDBMSであるPOSTGRES
の特徴の一つでした。(*4)
 POSTGRES4.2はある程度安定して動き、Tcl/Tkに
よるPGBrowseというGUIやONYXという4GLインター
フェースも貢献されていました。また、バイナリ
アーカイブも入手可能でした。そのころ、石井達
夫氏がComputerToday誌に書かれた記事(*5)で、
POSTGRESで日本語EUCが使えることが紹介されま
した。同氏は日本語による正規表現検索のための
パッチを作成されました[2]。それまで、商用以
外のDBMSでは十分に日本語を使えるものが無くて、
仕方なくPerlで書かれた簡易DBMSなどを使ってい
た筆者にとっては朗報でした。
 ただ、歴史的な経緯やオブジェクト拡張により、
POSTGRESを使うための問い合わせ言語やPOSTGRES
に関する文書の記述には、あまり一般的でないコ
マンド名や用語も使われているため、SQLでDBMS
の利用を覚え始めた人達にとっては幾分使い難い
ものだったと思います。たとえば、次の各項目は
同じことを意味する用語の集まりです。

   * 行(row)、レコード(record)、タップル(tuple)、インスタンス(instance)
   * カラム(column)、属性(attribute)、フィールド(field)
   * 表(table)、関係(relation)、クラス(class)
   * カーソル(cursor)、ポータル(portal)

 POSTGRESでいうところのオブジェクトリレーショ
ナルDBMSの位置付けは図-1のように、リレーショ
ナルDBMS(RDBMS)とオブジェクト指向
DBMS(OODBMS)の特長を適度に併せ持ったものです。
リレーションの定義に継承を使えたり、関数や索引
をユーザ定義により拡張できるうえに、RDBMSの持
つ高速性能を維持します。[3]

		+-----------+-----------+
		|           |           | RDBMS:  Relational DBMS
  問い合わせあり|   RDBMS   |  ORDBMS   | ORDBMS: Object Relational DBMS
		|           |           | 
		+-----------+-----------+
		|           |           | FS: File System
  問い合わせなし|    FS     |  OODBMS   | OODBMS: Object Oriented DBMS
		|           |           |
		+-----------+-----------+
		単純なデータ 複雑なデータ

	図-1. オブジェクトリレーショナルDBMSの位置付け

 (*3) 現在ILLUSTRAはInformix社のユニバーサル
サーバオプションとなっています。
 (*4) ILLUSTRAにはデータブレードと呼ばれるオ
ブジェクト拡張をオプションとして用意してあり
ます。
 (*5) 記事によるとこのころからCGIを使ってWEB
にDBを吊り下げたりしていたようです。


(3) Postgres95

 その後しばらくは、Paul M. Aoki氏を中心に
POSTGRESメーリングリストによるネットワーク上
でのサポートが続きました。Aoki氏のあとを引き
継いだJolly Chen氏とAndrew Yeu氏は
POSTGRES4.2から余分な機能をそぎ落とし、問い
合わせ言語をSQLに置き換えるなどの変更を行な
い、Postgres95として1995年にリリースしました。
そして、Stonebraker教授の新たな分散データベー
ス研究プロジェクトでMaripoza開発用DBMSエンジ
ンとして使われています。
  このころ、PHP/FIによってWEBのドキュメント
中に埋め込めるプログラムにDBアクセスのコード
を直接書き込めるようになり、WEBブラウザ経由
のアクセスも容易になりました。また、ODBCド
ライバが提供されるようになったため、WEB経由
にしなくても直接Windowsからアクセスをするア
プリケーションの作成も可能となりました。

	表-1. SQLとQUELの代表的なコマンドの対比表

	SQL	| QUEL
	--------+---------
	CREATE 	| CREATE
	DROP	| DESTROY
	INSERT	| APPEND
	UPDATE	| REPLACE
	DELETE	| DELETE
	SELECT	| RETRIEVE


(3) PostgreSQL

  Chen氏とYeu氏による開発やサポートはMarc G.
Fournier氏を中心とした沢山のネットワーク上の
ボランティア達に引き継がれ、SQL92準拠などを
目標に、続けられています。1996年にメジャーバー
ジョンアップを行なう際に、メーリングリスト上
での投票によりPostgreSQLに改名されました。バー
ジョン番号もPOSTGRESからの通番を復活させまし
た。POSTGRESが4.2で終っていたので、それに続
くPostgres95をバージョン5として、PostgreSQL
のバージョンは6になったわけです。現在、
PostgreSQLのバージョンは6.4で1998年11月にリ
リースされました。
  PostgreSQLにはpgaccessというGUIを始め、様々
な言語とのインターフェース、埋め込みSQLなど
が用意されていて、アプリケーションからの利用
の可能性が広がっています。
  以下はPostgreSQLに関するインターネット上の
情報へのポインタです。

 インターネット上でのPostgreSQLに関する情報
の源:
	http://postgreSQL.org/にあります。
 UCBにおける過去と現在のデータベース関係の開
発プロジェクト:
	http://s2k-ftp.cs.berkeley.edu:8000/
 石井達夫さん主催の日本語PostgreSQLメーリン
グリスト(pgsql-jp ML):
	http://www.sra.co.jp/people/t-ishii/PostgreSQL/
 いちろうさんが座長をするPostgreSQLの文書和
訳プロジェクト:
	http://www.imasy.or.jp/~ichiro/postgres/ml.html 
 FreeBSDユーザのためのPostgreSQL ports:
        ftp.jp.freebsd.org:/pub/FreeBSD/ports/japanese/postgresql
	(あるいは世界中のFreeBSDミラー・サイト)
 堀田倫英さんの和訳された文書:
	http://www.remus.dti.ne.jp/~sim/postgres/index.html
 まえだみつひろさんの和訳された文書:
	http://pg.cni.co.jp/
 FAQ和訳, Kerberosでの認証など:
	http://www.rccm.co.jp/~juk/pgsql/


2. PostgreSQLの言語インターフェース

  PostgreSQLの言語インターフェースを、Plamo
Linux版PostgreSQLの実行例にて紹介します。
(*6)

(1) プリプロセッサ

 ecpgは簡単な記述でC言語のソースを生成するこ
とのできるプリプロセッサです。市川哲彦さんに
より日本語対応がされています。ecpgはEUC対応
でecpg-sjはSJIS対応です。ただし、ecpg-sjは
SJIS対応のCコンパイラでのみ使えます。

	% ecpg test2.pgc
	% cc -I/usr/local/pgsql/include test2.c \
		-L/usr/local/pgsql/lib -lpq -lecpg -o test2

で実行モジュールができますので、以下のように
実行します。

	% createdb junk
	% test2
	% destroydb junk


(2) JAVA

 JDBC postgresqlドライバのサンプルpsql.java
の実行例

 JDBC ドライバの日本語エンコーディングの拡張
はたかばとしはるさんと持田修司さんによるもの
です
(http://www.yo.rim.or.jp/~mochid/postgresql-jdbc/)。

	% cd ~postgres/example/interfaces/jdbc
	% java example.psql jdbc:postgresql:postgres postgres postgres
	PostgreSQL psql example v6.3 rev 1

	Connecting to Database URL = jdbc:postgresql:postgres
	Connected to PostgreSQL 6.3

	[1] 
		...


(3) Python

  Python(*7)のモジュールPyGreSQLのサンプル
basics.pyの実行例

	% python
	>>> import basics					<=
	--------------------------------------------------
		...モジュールの使い方の表示...
	--------------------------------------------------
	>>> cnx = basics.connect()				<=
	>>> basics.demo(cnx)					<=
		...


(4) Perl

 PerlによるCGI経由でブラウザからPostgreSQLの
DBにアクセスできます。例題として付属の
ApachePg.plをCGI用のディレクトリにコピーし、
1行目のperlのパスを直して、実行権を与えてや
るとCGIとして動きます。

	# cd /usr/local/etc/httpd/cgi-bin
	# cp ~postgres/example/interfaces/perl5/ApachePg.pl .
	# chown nobody ApachePg.pl
	# chmod +x  ApachePg.pl

 これにLynxを使ってアクセスしてみました。

	% lynx http://localhost/cgi-bin/ApachePg.pl

Lynx から ApachePg.pl の使用例
図 2 Lynx から ApachePg.pl の使用例 (5) Ruby Ruby はまつもとゆきひろさんの作られたオブ ジェクト指向スクリプト言語です (http://www.netlab.co.jp/ruby/)。 rubyの postgres拡張モジュールはまつもとえいじさんに よるものです。 Ruby(*8)のpostgresモジュールのサンプル psql.rbの実行例 % psql.rb Welcome to the POSTGRESQL interactive sql monitor: Please read the file COPYRIGHT for copyright terms of POSTGRESQL type \? for help on slash commands type \q to quit type \g or terminate with semicolon to execute query You are currently connected to the database: postgres postgres=> ... (6) その他のインターフェース CやC++のライブラリはもちろんのこと、Tcl/Tk のライブラリやシェルも初期のころからあり、 GUIのpgaccessはTcl/TKで書かれています。 その他のインターフェースに、WEB文書の中に 記述してPostgreSQLとの連携ができるPHP/FI(堀 田倫英さんの記事参照)やWindowsのODBCドライバ でPostgreSQLサーバへのアクセスが可能な PsqlODBC(片岡裕生さんの記事参照)もあります。 また、SQLの埋め込み言語にTclの構文が使える PL/Tclもあります。 (*6) Plamo LinuxにおけるPostgreSQLについては 12月号で紹介しましたが、言語インターフェース は~postgres/examples/interfaces/の下のそれぞ れのディレクトリに展開されます。Plamo Linux については、 http://www.linet.gr.jp/~kojima/Plamo/ を参照 下さい。FTP サイトは ftp://ftp.linet.gr.jp/pub/Plamo/ にあります。 また、技術評論社のサイトにもあります。 ftp://ftp.gihyo.co.jp/pub/Plamo/ (*7) PlamoではPython-1.5.1がcontrib/Develop に納められてます。 (*8) Plamoではruby-1.1c2がcontrib/Developに 納められてます。 参考文献 [1]増永良文、「リレーショナル・データベース入門」、 サイエンス社、1991、(ISBN-4-7819-0594-3) [2]石井達夫、「WWW活用術」、 ComputerToday、1995-5,p36 [3] マイケル・ストーンブレーカー、 "OBJECT-RELATIONAL DBMSs THE NEXT GREAT WAVE"、 邦訳「オブジェクトリレーショナルDBMSs」、 インターナショナル・トムソン・パブリッシング・ジャパン /株式会社ビーエヌエヌ、 1996、(ISBN4-89369-436-7) [4] 「簡単システム構築術」、 SoftwareDesign、1998-12 [5]石井達夫、「PostgreSQL完全後略ガイド」、 技術評論社、1999、(ISBN4-7741-0714-4)