• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Pg.pmモジュールがロードできない)

Pg.pmモジュールがロードできない

このQ&Aのポイント
  • 現在、Webサーバが古くなったため、新しいWebサーバにアプリケーションを移行しようとしています。PerlもPostgreSQLもインストールし、プログラムを実行するのですが、Pg.pmモジュールがロードできません。
  • エラーメッセージによると、@INCにPg.pmが見つからないとのことです。
  • 再インストールするかどうかはわかりませんが、対処方法をご存知の方がいれば教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.3

use Pg; していませんか。perl と postgresql のインタフェースには、DBI を使う DBD::Pg と PostgreSQL ネイティブインタフェースの Pg とがあります。Pg は、PostgreSQL 7.3? くらいから別配布となり、http://gborg.postgresql.org/ から Pg-2.1.1.tar.gz が入手できたのですが、http://pgfoundry.org/projects/pgperl/ に移動したようです。しかしこのプロジェクトページには何も登録されていません。CPAN には、http://search.cpan.org/~mergl/pgsql_perl5-1.9.0/ が登録されていますが、古そうです。 どうしてなくなったのか分かりませんが、DBD::Pg を使って書き直すか、Pg-2.1.1.tar.gz を他の場所から探し出すしかないでしょう。

penix101
質問者

お礼

御礼が遅くなり、申し訳ありません。 Pg-2.1.1.tar.gzを入手しインストールしたところ、無事問題が解決できました。本当にどうもありがとうございました。 助かりました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

確認ですが, perl -V で表示される @INC には /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBD は入っていないわけですね? だとすると, push のタイミングの問題になると思います. use はスクリプトのコンパイル時に処理するのに対し push はそのままでは実行時に処理しますから, 単純に「文面上 push が use より前にあればよい」というものではありません. Pg.pm を use する前に @INC に push しないといけませんから, 1.use lib を使う 2.push を BEGIN ブロックに入れる (BEGIN { push(@INC, ...); } のように) のいずれかでしょう.

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

@INC のどのディレクトリにも Pg.pm がないからじゃないですか? Pg.pm の絶対パスをよ~く見ると, vendor_perl というディレクトリがはさまってますね.

penix101
質問者

補足

早速、回答をいただき、ありがとうございます。 すみません。@INCの内容をすべて記載していませんでした。  @INC: /usr/lib/perl5/5.8.5/i386-linux-thread-multi /usr/lib/perl5/5.8.5 /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi  (中略)   /usr/lib/perl5/site_perl/5.8.5 (中略) /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi (中略) /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi (中略) /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl . になっています。 プログラムの中でもpush (@INC, "/usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBD/");と記載しています。 対処方法はありますか。

すると、全ての回答が全文表示されます。

関連するQ&A