[pgsql-jp: 31026] Re: PerlからDBI:P gでの接続エラー

Hajime Lucky Okada paraiso @ luckyo.8m.com
2003年 9月 10日 (水) 20:02:05 JST


こんにちは、岡田です。

kato-shinichi @ mdis.co.jp wrote:
> 
> 下記環境よりPostgreへの接続ができずに困っております。
> OS:Linux RedHat 8.0
> 言語:Perl 5.8.0-55
> Postgresql:7.2.2-1
> perl-DBD-Pg:1.13-5
> すべてRedHatデフォルトインストール時の状況です。

「RedHatデフォルト」という形式で使用したことが無い(ソースからビルト)ので
どのようにインストールされているか分かりませんが、そもそも
DBI と DBD::Pg は別パッケージです。両方ともきちんとインストールされていますか?

↓の use DBI; の行でエラーが出ていない「様」なので、問題は無いとは思いますが・・・
簡単な確認法としては、シェル上で
(1) perldoc DBI <enter>
   perldoc DBD::Pg <enter>
   として、きちんとドキュメントが表示されるのか。
(2) RedHat ということで、"rpm -qa | grep DBI or DBD" でパッケージが
   インストールされているか。
等でパッケージの状態に関して確認出来ます。

> 
> postgresユーザーでのデータベース作成〜サーバー上でのテーブル検索などの操作はすべて正常に確認できました。
> コードは下記です。
> ------------------------
> #!/usr/bin/perl -w
> use DBI;
> use strict;
> 
> my $DB_name    = 'dbi:Pg:dbname=DB_test';
> my $DB_user    = 'postgres';
> my $DB_pwd     = 'pass';
> 
> my $mydb = DBI->connect($DB_name,$DB_user,$DB_pwd) || &Error("接続エラー");
> ------------------------
> 
> 上記コードで「$mydb」に値が戻らず、接続エラーとなってしまいます。

「postgresユーザーでデータベースへの正常な接続を確認出来た」ということなので
psql による接続は出来たということでしょう。
これが出来てない状態で perl からの接続はまず不可能でしょう。


さて、DBI の使い方について、「Perl の小技」の中の詳細な説明ページは
参照されましたか?
http://member.nifty.ne.jp/hippo2000/perltips/dbimemo.htm

この中の「DBIクラス・メソッド」の章、connect の項に説明がありますが
$dbh = DBI->connect($data_source, $username, $password)
            or die $DBI::errstr;
$dbh = DBI->connect($data_source, $username, $password, \%attr)
            or die $DBI::errstr;
により、エラーが出れば die で死亡し、その理由が取得(表示)されるはずです。
$DBI::errstr のところです。


\%attr の所に設定される属性オプションとして RaiseError 等がエラーの扱いに
影響を及ぼします。詳しくは、「すべてのハンドルに共通の属性」の章を参照してみて下さい。

select の際に、ステートメント・ハンドルを取ることになりますが、私の経験では
その後の全ての処理を通してエラーの取得は $DBI::errstr メソッドで取得出来ます。

とにかく、DBI の使用法に関して、私はこれより詳しい資料は見たことがありません。
それくらい素晴らしいページです。 DBD::Pg のページも参照をお勧めします。

一度確認してみて下さい。






pgsql-jp メーリングリストの案内