このページでは、perlからDBD経由でPostgreSQLを操作できるようにする設定について説明します。
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し、インストールします。
$ cd /usr/ports/databases/p5-DBD-Pg $ make config-recursive $ make install clean
インストール完了後の設定等は特にありません。
上記のインストールが完了後、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ファイルを用意します。
以下の内容を「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ファイルの内容を流し込みます。
$ su pgsql $ createdb postgresql_test $ psql -f test.sql postgresql_test
これでDB側の設定が完了しました。
最後に、下記のような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
上記のような表示が出たら、テストは成功です。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
| まだ評価がありません |
表示できるメッセージはありません。