PostgreSQLとlibpgtcl
 PostgreSQLは、 主にPC-UNIXで使われている、フリーで高機能なRDBMS (リレーショナルデータベース管理システム)です。基本仕様のほとんどは SQL92に準拠(*1)しているため、標準的な仕様をもつRDBMSとして使うことができ、 オラクルの Oracle やサイベースの Adaptive Server Enterprise などの商用RDBMSともさほど違和感なく管理・開発することができます。 無補償というリスクを除けば高価な商用RDBMSと遜色ない完成度を持っており、 昨今のPC-UNIXの浸透もあって今後ますます認知が進んでいくことでしょう。 で、アプリケーションとしてRDBMSに接続してデータ操作をするプログラムは、 やはりGUI画面を配した使いやすいものにしたいものです。 そこで出て来るのが Tcl/Tk というわけで、Tcl/TkはC言語と並んで、PostgreSQL のデータベース操作をする言語インターフェースとしては最も歴史のある言語であり、 GUI画面の作りやすさがその後登場したPerlインターフェース、 Pythonインターフェースにもない利点として今日まで広く認知されています。
(*1)比較的最近まで残っていた大穴として FOREIGN KEY が使えないという制限がありましたが、 2000年5月10日公開のバージョン7でこれがサポートされたことにより、 SQL92標準仕様のほとんどが実装されたといえるでしょう。

 PostgreSQLにおいてTcl/TkのGUIが見事に活用された例として、 PostgreSQLについてくる「pgaccess」という、 マイクロソフトのAccessみたいなシート状の操作画面があります。 これはTcl/Tkで書かれており、GUI操作でデータの編集ができるツールです。 かなりスゴイできなので、ぜひチェックしてみてください (日本語の表示にはwish8.0jpが必要です)。

スクリーンショット
PgAccessのメイン画面。データベースをオープンすると表の一覧が現れます

スクリーンショット
表の編集画面。動作は最近のJava化した商用RDBMSのツールに比べ、大変に軽快です

 PostgreSQLのTcl/Tkインターフェースはlibpgtclと呼ばれ、 PostgreSQLのソースアーカイブの中に入っています。 libpgtclは共有ライブラリで、Tcl/Tk処理系からloadまたはpackage require コマンドでロードして使います。 実験室では Linux 2.2.14 on x86 (RedHat Linux 6.2J) 上で、 PostgreSQL 7.0.2とPostgreSQL 7.1.3 に同梱のlibpgtcl 2.1をTcl/Tk 8.4a1 でビルドし、動作を確認することができたので、この環境での動作を紹介しています。

 


日本語の扱いは?
 PostgreSQLは日本語データを扱うことができ、 日本語EUCやUnicodeをサポートしています。 PostgreSQL自身の日本語の扱いについては、ソースアーカイブに含まれる ./doc/README.mb.jp で日本におけるPostgreSQLの第一人者であるSRAの石井さんが詳説されているので、 そちらに譲ることにしまして、 libpgtclの日本語ですが、 基本的にTcl/Tkのどのバージョンでも日本語を扱うことはできます。 但し、内部文字コードがUnicode文字の表記コードの一種UTF-8になった Tcl/Tk 8.1以降で日本語を含む非英語圏の文字を正しく扱うためには、 --enable-unicode-conversionというconfigureオプションを指定してPostgreSQLをコンパイルする必要があります。 また、Tclスクリプトを実行する側は環境変数 PGCLIENTENCODINGにUNICODEをセットする必要があります。


libpgtclのインストール
libpgtclはPostgreSQL本体と同じソースアーカイブに入っています。 PostgreSQL本体のインストール時に --with-tclをつけていれば本体と一緒にインストールしてくれるのでここの作業は不要ですが、 そうでなくても下のように、 単にmake,make install でライブラリが作れます。
% cd src/interfaces/libpgtcl
% make
% su root
# make install
/usr/local/pgsql/lib/libpgtcl.so.2.1 ができれば完了です。

拡張レビュー分室 top
(first uploaded 2000/01/12 last updated 2002/01/11 , MISUMI URANO )