perlからPostgreSQLを利用できるようにする

対象プラットフォーム: FreeBSD 7.x / FreeBSD 6.x


はじめに

このページでは、perlからDBD経由でPostgreSQLを操作できるようにする設定について説明します。

「p5-DBD-Pg」のインストール

perlスクリプトからPostgreSQLを利用するには、DBD-Pgというperlモジュールを利用します。
FreeBSDでは、このperl-PostgreSQLとの連携用のモジュールは、「p5-DBD-Pg」の名前でportsとして用意されています。
p5-DBD-PgはPostgreSQLやperl、mod_perl等をインストールしても自動的には導入されませんので、別途インストールする必要があります。

インストールにはportsを利用します。
portsがまだ展開されていない場合は、「最新のportsを取得して展開する」を参照して最新のportsを入手し、展開してください。

portsの展開が完了した後、下記手順でp5-DBD-Pgをmakeし、インストールします。

「p5-DBD-Pg」のインストール
$ cd /usr/ports/databases/p5-DBD-Pg
$ make config-recursive
$ make install clean

インストール完了後の設定等は特にありません。

perlスクリプトからの利用方法

上記のインストールが完了後、perlからDBIインターフェースを利用してPostgreSQLにアクセスすることが可能になります。

基本的な手順は、

(1) DBI->connect() でDBを開く
(2) 上記,納萋世靴DBハンドラに対し、prepare() / execute() を発行しSQL文を実行
(3) 上記△納萋世靴織好董璽肇瓮鵐肇魯鵐疋蕕紡个掘fetch() を発行しSQL文の結果を取得
(4) 上記△納萋世靴織好董璽肇瓮鵐肇魯鵐疋蕕紡个掘finish() を発行し実行結果をクリア
(5) 上記,納萋世靴DBハンドラに対し、close() を発行し、DBを閉じる

のようになります。

サンプルコード

以下にDBからデータを読んでくる簡単なperlスクリプトと、テスト用のDBの構築をするためのSQLファイルを用意したので、動作確認にご利用ください。

テストDBの構築用SQLファイル

まず、テストDBを構築するためのSQLファイルを用意します。
以下の内容を「test.sql」として保存してください。

テストDBの構築用SQLファイル(test.sql)
SET client_encoding = 'UTF8';
SET check_function_bodies = false;
SET client_min_messages = warning;

SET search_path = public, pg_catalog;
SET default_tablespace = '';
SET default_with_oids = false;

CREATE TABLE person (
    name character varying(256),
    age integer
);

ALTER TABLE public.person OWNER TO pgsql;

COPY person (name, age) FROM stdin;
Oblien	32
Oliver	45
Nielsen	18
\.

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM pgsql;
GRANT ALL ON SCHEMA public TO pgsql;
GRANT ALL ON SCHEMA public TO PUBLIC;

テストDBの作成とSQL文の流し込み

次に、テストDBを作成し、その中に先ほどのSQLファイルの内容を流し込みます。

テストDBの作成とSQL文の流し込み
$ su pgsql

$ createdb postgresql_test
$ psql -f test.sql postgresql_test

これでDB側の設定が完了しました。

テスト用perlコード

最後に、下記のようなperlスクリプトを用意して実行してみます。

テスト用perlコード
#!/usr/local/bin/perl

use DBI;

$aHost      = 'localhost';
$aDBName    = 'postgresql_test';
$aTableName = 'person';
$aUser      = 'pgsql';
$aPassword  = '';

$tDBHandler=DBI->connect("DBI:Pg:host=$aHost;dbname=$aDBName",$aUser,$aPassword);

$tStatementHandler=$tDBHandler->prepare("SELECT name,age from $aTableName");

$tResult=$tStatementHandler->execute();

while(@RESULT=$tStatementHandler->fetchrow())
{
    print $RESULT[0].','.$RESULT[1]."\n";
}

$tStatementHandler->finish();

$tDBHandler->disconnect();

実行結果
Oblien,32
Oliver,45
Nielsen,18

上記のような表示が出たら、テストは成功です。


あなたの探し物は見つかりましたか?
まさにこれだ 参考になった ちょっと違う これじゃない
何かメッセージがあればお願いします

このメッセージを非公開にする

ご注意

・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。


まだ評価がありません

表示できるメッセージはありません。


目次に戻る
image