
PostgreSQLで作るLinuxデータベース(3)
PostgreSQLをプログラムで操作する
前回までにPostgreSQLの歴史やインストール方法について説明してきた。今回は、実際にPostgreSQLとPerlやC言語を使ったアプリケーションを開発する方法について解説する。
宗近龍一郎(ハンドル名:まいパパ)
株式会社デジタルデザイン
Project BLUE
2000/11/21
|
今回のおもな内容 |
PostgreSQLはいろいろな言語とのインターフェイスを持っていますが、今回は代表的なところとして、PerlとC言語でのインターフェイスや、PostgreSQLと一番組み合わせて使われることが多いと思われるApacheおよびPHP3を使ってのアプリケーション開発についても説明したいと思います。
何をするにしても、データベースがなければ話になりません。そこで、今回紹介するプログラムで使うためのサンプルデータベースを作成しましょう。とりあえず、氏名と電話番号および電子メールアドレスを管理する簡易アドレス帳ということにします。
まず、PostgreSQLのプロンプトでcreate table文を発行して、テーブルを定義します。
postgres=> create table addrbook (name varchar(50),telno
varchar(50), email varchar(50)); |
#折り返していますが、実際には1行で入力します
テーブルが作成できたらテストデータを入力するのですが、一から作成するのは大変なので、先に用意しておいたデータからコピーすることにします。
以下の内容のテキストファイルを用意し、addrbook.txtというファイル名で保存します。スペースの部分はTABにしてください。
R.Munechika 070-6682-**** munetika@myhome.niji-net.com |
このファイルをcopyコマンドを使ってインポートします。
postgres=> \copy addrbook from addrbook.txt |
コピーされた内容を確認します。
postgres=> select * from addrbook; |
以上でサンプルデータベースの用意ができました。
■Perlインターフェイスの導入
PostgreSQLにPerlからアクセスするには、インターフェイスを導入しなければなりません。
PostgreSQLのソースを展開したディレクトリにあるsrc/interfaces/perl5ディレクトリに移動します(ここでは、/usr/local/src/postgresql-6.5.3とします)。
$ cd /usr/local/src/postgresql-6.5.3/src/interfaces/perl5 |
ここで、Makefile.PLをPerlから実行します。
$ perl Makefile.PL |
コンパイルを実行します。
$ make |
rootになってインストールを行います。
$ su |
■Perlのプログラム(表示用)
PerlでPostgreSQLに作成したデータベーステーブルの表示を行うプログラムを作成してみます。以下は、先ほど作成したテーブルの内容を表示する簡単なプログラムのリストです。
#!/usr/bin/perl |
| リスト1 サンプルプログラムtest1.pl |
1行目はPerlの実行ファイルの絶対パスを指定します。whichなどのコマンドで調べて、各自の環境に合わせてください。3行目がデータベース名の指定で、6行目がデータベースに対して実際にSQL文を発行する部分です。
8〜13行目までが表示を行う部分になります。まず10〜13行目でループを行い、1行ずつfetchを行ってレコードを取得し、printで出力します。
■Perlのプログラム(追加用)
次にレコード追加を行うサンプルプログラムtest2.plについて説明します。
#!/usr/bin/perl |
| リスト2 サンプルプログラムtest2.pl |
5行目まではtest1.plと同じですが、6行目のSQL文の発行部分が異なる点に注目してください。また、“@”を入力するような場合は、“\”を使ってエスケープすることに注意してください(実際のデータに“\”は登録されません)。
8〜13行目はエラー処理を記述しています。処理がうまく実行できなかった場合は、resultStatusに“PGRES_COMMAND_OK”以外のステータスを戻してきます。
test2.plを実行してから表示用のプログラムtest1.plを実行すると、レコードの追加が行われているのが分かります。
[postgres@micky postgres]$ ./test2.pl |
■C言語のプログラム(表示用)
次に、C言語を使ってPostgreSQLのデータベーステーブルの中身を表示してみることとします。
/* ヘッダファイル取り込み */ |
| リスト3 サンプルプログラムtest1.c |
C言語で記述する際は、postgres.hとlibpq-fe.hのインクルードをお忘れなく。また、PQexec()関数は以下のように第2引数にSQL文を代入して実行します。
/* select文の発行 */ |
PQgetvalue()関数はデータベースから値を取り出すもので、第2引数に「行」、第3引数に「列」を指定します。そして、PQgetvalue()関数の戻り値をprintf()関数で整形して出力します。
kou1 = PQgetvalue(res,i,0); |
コンパイル時は、PostgreSQLのヘッダファイルとライブラリファイルが存在するディレクトリに明示的にパスが通るようにします。
cc -o test1 test1.c -I$POSTGRES_HOME/include -L$POSTGRES_HOME/lib
-lpq -lnsl -lcrypt |
■C言語のプログラム(追加用)
/* ヘッダファイル取り込み */ |
| リスト4 サンプルプログラムtest2.c |
表示するプログラムの変更個所はPerlのプログラムのときと同様、SQL文を発行するところとSQL文からの戻り値を判断するところです。C言語でもPerlと同じような処理を行えばよいということが理解できるでしょう。
PHP3からPostgreSQLにアクセスするには、PHP3を導入します。ここではDSO版のApacheを使うものとして説明します。以後の操作はrootで作業します。
■Apacheのインストール
# cd /usr/local/src |
■PHPのインストール
# cd /usr/local/src |
■httpd.confの編集
Apacheの標準の設定ではPHP3が実行できないようになっていますので、設定ファイル(httpd.conf)を編集します。
#AddType application/x-httpd-php3 .php3 |
という個所のコメント行の「#」を削除して、設定を有効化します。httpd.confを編集したら、必ずApacheを再起動してください。
■PHP3のプログラム(表示用)
PHP3のプログラムとPerlやC言語でのプログラムとの相違点は、PHP3はサーバサイドで実行し、クライアント(Webブラウザ)で表示するというところにあります。
<HTML> |
| リスト5 サンプルプログラムtest1.php3。プログラムの文字コードセットはEUCにしてください |
PHP3の文法はC言語によく似ているので、HTMLタグを除けば先ほどのC言語のサンプルプログラムとほとんど変わらないことにお気付きになるでしょう。
■PHP3のプログラム(追加用)
次にPHP3でのレコード追加プログラムの例を示します。HTMLフォームでデータを入力し、そのHTMLフォームからPHP3プログラムを実行することにより登録を行います。リスト6はPHP3プログラムを呼び出すHTML、リスト7がPHP3プログラムです。
<html> |
| リスト6 サンプルプログラム用HTML(test2.html)。HTMLフォームに入力したデータは、環境変数としてPHP3に引き継がれてレコードの追加が行われます |
<HTML> |
| リスト7 サンプルプログラムtest2.php3 |
これもC言語の例と同じく、あまり変わりがないことがお分かりになるでしょう。
第1回の原稿に書いたとおり、PostgreSQLにはレプリケーションが実装されていないために、つい最近まではPostgreSQLを使用してシステムインテグレーションを行うのはいろいろと苦労がつきまとっていました。
ところが、レプリケーションを実装するための仕組みが最近になって現れてきました。1つが、筆者の所属する株式会社デジタルデザインが2000年11月より出荷を開始する「FCR for PostgreSQL」です。このソフトは2つのサーバ間にFast Connector Serverを置いて、insert文などの発行を受けてもう1つのサーバにトリガを使ってレプリケーションを行う仕組みになっています。評価版がダウンロードできますので、一度お試しになられてはいかがでしょう。
また、導入方法などについては下記のURLが参考になります。
http://www.asahi-net.or.jp/~pq6a-tsmt/poco/fcs4pgsql/fcs4pgsql
もう1つの実装は、株式会社グッデイの細川さんがGPL2で公開されている「Usogres」です。
http://usogres.good-day.net/
UsogresはPostgreSQLのプロキシとして機能するサーバソフトです。Usogresで実行されたSQLの処理が複数のPostgreSQLサーバーに送られるので、結果的にリアルタイムでバックアップされるというものです。しかし、厳密的な意味でのレプリケーションはまだ実現されていません。作者の細川氏によると、今後本格的なレプリケーション機能を実装するとのことなので大いに期待が持てるソフトです。
今回まで3回にわたりPostgreSQLの説明を行ってきました。PostgreSQLの概要や導入方法、アプリケーション開発について、おおよそ理解できたと思います。この連載が皆さんのお仕事に生かされることを願ってやみません。
| 連載 PostgreSQLで作るLinuxデータベース |
| Linux Squareフォーラム データベース関連記事 |
| 連載:快速MySQLでデータベースアプリ!(全11回) 軽快な動作で知られるRDBMS、MySQLでDBアプリの構築を行う。MySQLのインストールに始まり、PerlやRubyなどのスクリプトでデータベースを操作する方法までを完全解説 |
|
| 連載:今から始める MySQL入門(連載中) 定番のLAMP(Linux+Apache+MySQL+PHP)構成でWebアプリケーション開発に挑戦! サンプルアプリの構築を進めながら、基礎知識や操作方法について詳しく解説する |
|
| 連載:Oracleマイスター養成講座(全6回) 本連載では、Oracleの管理・チューニング方法を紹介していく。これからOracleを始める人、そしてOracleをより深く理解したい人のための、一歩踏み込んだ実用講座 |
|
| 連載:DB2マイスター養成講座(全7回) 本連載では、DB2 UDBの実践的な運用・管理方法を紹介していく。DB2を利用するうえで必要な知識を、実運用を前提にDB2のプロが解説 |
|
| 特集:エンタープライズ市場に向かうMySQL
5.0[前編] MySQL 5.0の新機能をアルファ版でチェック 1月に公開された5.0アルファ版は大幅に拡張されており、エンタープライズ市場への進出を予感させる |
|
| 特集:Linuxで動くリレーショナルデータベース・カタログ データベースサーバのOSとしてLinuxを採用するケースが増えている。Linuxで動作する7つの主なリレーショナルデータベースを紹介する。製品導入の際の参考にしてほしい |
|
|
TechTargetジャパン
- OSSライセンスの採用傾向に「変化」あり (2012/5/21)
OSS普及の一翼を担ってきたライセンス、GPLファミリー採用の割合が減少傾向にあるそうです。いったいどうして? - ここからFirefoxの反撃が始まる (2012/3/12)
2月のLinux SquareのランキングではFirefoxの記事がダントツのページビューを集め、トップに立ちました - CMakeでMySQLをビルドしてみる (2012/3/8)
ここまでの作業でCMakeを使う準備が整いました。今回はひとまずMySQLをビルドしてみます - MySQLのビルドに欠かせないCMakeを準備する (2012/3/2)
今回は、MySQLをビルドするために欠かせないツール「CMake」をインストールし、使う準備をします
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
