24.7. PostgreSQL 接続インターフェース

PostgreSQL の特徴の 1 つに、多くのプログラミング言語とのインターフェースをサポートしていることがあげられます。C や C++ のみならず、Tcl/Tk、Perl、Python、Ruby、Bash のインターフェースなども提供されており、アプリケーションに容易に組み込むことが可能です。また、ODBC や JDBC のドライバも提供されています。Web サーバーとの連携においては、CGI からの利用はもちろんのこと、Apache Web サーバーのモジュールとして提供されている mod_php4 や mod_perl からの利用も可能です。PostgreSQL + PHP + Apache の組み合わせによる HTTP サービスはすでに多くの実績を持ちます。このように、PostgreSQL は多くのプログラミング言語とのインターフェースをサポートしており、非常に幅広い開発環境で利用できます。PostgreSQL が標準でサポートしている主な言語インターフェースには以下があります。プログラミングの詳細は、PostgreSQL オフィシャルマニュアルや専門書籍等を参照してください。

C

C 言語用のインターフェースとしては、libpq というライブラリが標準で付属しています。postgres_fe.h と libpq_fe.h の 2 つのヘッダファイルを include して使用します。PostgreSQL 7.1 以前のバージョンでは、postgres.h と libpq_fe.h を include していたので注意が必要です。

C++

C++ 言語用のインターフェースとしては、libpq++ というライブラリが標準で付属しています。

ecpg

ecpg は、C言語に SQL を埋め込むためのプリプロセッサで、ecpg プリプロセッサを通すことで自動的にCプログラムが生成されます。これにより、埋め込みSQL を使用してCプログラムの開発が容易になります。「PostgreSQL 7.2.3 リファレンスマニュアル」 の「 II. PostgreSQL クライアントアプリケーション」も参照してください。

Tcl/Tk

Tcl/Tk 用のインターフェースとしては、libpgtcl というライブラリが標準で付属しています。Tcl/Tk スクリプトで libpgtcl.so をロードして使用します。

Perl

Perl 用のインターフェースとしては、Pg という Perl モジュールが標準で付属しています。スクリプトで Pg モジュールの使用を宣言することで利用できます。

Java

Java 用のインターフェースとしては、PostgreSQL 用の JDBC ドライバが標準で付属しています(/usr/share/pgsql/)。

Python

Python 用のインターフェースとしては、 PyGreSQL という拡張モジュールが標準で付属しています。スクリプトで pg モジュールの使用を宣言することで利用できます。

また、PostgreSQL に含まれる標準のインターフェース以外にも、PostgreSQL と接続する様々なアプリケーションやライブラリが公開されています。代表的な言語インターフェースとしては、以下のものがあげられます。

Turbolinux 10 Server は、これらサードパーティ製の言語インターフェースも収録しています。

24.7.1. PHP

PHP は、Web アプリケーションでの使用を目的として開発され、現在注目されているサーバーサイドスクリプトです。日本においても PHP の利用者、および PHP を使用した Webアプリケーション開発は急速に増加しています。PHP の最大の特徴は、HTML 中にスクリプトを埋め込む形でプログラムを記述できることです。このため、HTML と PHP スクリプトの部分を切り分けることが容易で、プログラム全体の見通しもよいものになります。また、PHP は CGIプログラムとしても動作しますが、Webサーバーに組み込まれたスクリプトエンジンにより処理することも可能です。これにより、CGI プログラム起動時のオーバーヘッドとリソースの消費によるパフォーマンス低下のデメリットを解決することができ、Perl による CGI プログラムと比較して処理速度の高速化やサーバー負荷の軽減が期待できます。Webサーバーとの連携では特に Apache が使用されている実績が多く、mod_php4 という Apache の DSO(Dynamic Shared Object)モジュールで PHP のスクリプトエンジンが提供されています。PHP に関する詳細な情報は、「日本 PHP ユーザー会」の Web サイトが参考になります。日本語マニュアルの公開やメーリングリストの運営など積極的な活動が続いています。

日本 PHP ユーザー会

http://www.php.gr.jp/

PHP は、PostgreSQL とのインターフェースを標準で備えており、pgsql.so というモジュールで提供されています。このモジュールは、PostgreSQL のデータベースを操作するための多くの関数が含まれています。Turbolinux 10 Server では、/usr/lib/php/extensions/no-debug-non-zts-20020429/ ディレクトリに pgsql.so がインストールされ、PHP の設定ファイル(/etc/httpd/php.ini )にモジュールを使用するための以下の設定が記述されています。

extension_dir = /usr/lib/php/extensions/no-debug-non-zts-20020429/
extension = pgsql.so

PostgreSQL のデータベースを操作する実際のプログラミングについては、日本 PHP ユーザー会で公開している以下のマニュアルなどが参考になります。

PHP マニュアル

http://www.php.net/manual/ja/

PHP4 徹底攻略 PDF 版

http://www.php.gr.jp/php/php4tettei/

24.7.2. Perl (DBI+DBD)

Perl は、現在、最も普及しているスクリプト言語の1つと言えます。Perl は Webプログラミングにおいても幅広く利用されており、CGI プログラムの多くは Perl スクリプトで記述されています。Perl の大きな特徴の1つとして、Perl の機能を拡張するための Perl モジュールが数多く提供されていることがあげられます。公開された Perl モジュールの多くは、CPAN(Comprehensive Perl Archive Network)という Webサイトに登録され、その中には、PostgreSQL など外部データベースと連携するためのモジュールも存在します。このような世界中の開発者により登録された Perl モジュールを有効に活用することができます。

Perl から PostgreSQL へ接続するための代表的な手法としては、大きく分けて以下の 2 つの方法があげられます。

Pg.pm は、PostgreSQL に標準で含まれる Perl 用の接続インターフェースです。DBI(DataBase Interface)は、各種データベースにアクセスするための Perl モジュールで Tim Bunce 氏により開発されました。DBI は、各種データベースを Perl で扱うためのインターフェースを受け持ち、データベースに直接アクセスするのは、DBD と呼ばれる各データベース専用のモジュールです。つまり、DBD は各種データベースと DBI の間に入り、各データベースの差異を吸収しています。これにより、例えば、データベースが変更されたとしてもプログラムを大きく修正する必要がなくなります。また、1 つの Perl スクリプトで複数のデータベースへアクセスするようなプログラムを記述できるなどのメリットもあります。このように、特定のデータベースに依存しない汎用的なプログラムを作成できる点が、DBI + DBD の大きな特徴の 1 つです。

24.7.3. pgbash

pgbash は、pgsql-jp メーリングリストによりその仕様が議論され 1999 年にリリースされたソフトウェアで、bash の機能を引継ぎながら SQL 文を直接実行できる便利なシェルです(pgsql-jp ML は日本 PostgreSQL ユーザー会の管理に移行しました)。pgbash をログインシェルとして使用したり、シェルスクリプトとして利用することもできます。

pgbash についての詳細は、下記 Webサイトを参照してください。pgbash のマニュアルなどが日本語で掲載されています。

http://www.psn.co.jp/PostgreSQL/pgbash-2.1/index-j.html

本ガイドでは、pgbash をサブシェルとして使用するごく基本的な操作を説明します。

データベースへ接続できる Linuxユーザーへ su し、サブシェルとして pgbash を起動するために以下のコマンドを実行します。

$ su - postgres
Password:
$ pgbash

プロンプトが以下のようになります。

pgbash>

データベースへ接続するには、以下のコマンドを実行します。

pgbash> connect to database-name

また、リモートホストから接続するには、以下のようにコマンドを実行します。

pgbash> connect to database-name@host-name user user-name;

正常にデータベースへ接続できれば、SQL 文を発行してデータベースへの問合わせが行なえます。

pgbash> select * from table-name;

また、先に述べたように pgbash では、SQL 文の発行だけでなく通常のコマンドを実行することもできます。

pgbash> select * from table-name; | less

データベースとの接続を切断するには、以下のコマンドを実行します。

pgbash> disconnect database-name;

pgbash を終了しログインシェルに戻るには、以下のコマンドを実行します。

pgbash> exit