MTでDBD::Pgが動作しない

 とあるサイトで久々にMTの管理画面にアクセスしたら、なにやら管理画面にログインできない。ログインできないというか、DBD::Pgがロードできないというエラーが表示されてログイン画面にまで進まないのですね。mt-check.cgiにアクセスしてみると、やはりDBD::Pgが使えない状況になっているみたい、、、。こんな表示が出るわけです。

Undefined subroutine &DBD::Pg::db::_login called

 で、元々動作していたMTなのに何が起きちゃったんだろ? と、考えこんでいたのですが、よくよく考えてみたら元々CentOSのパッケージ版のPostgreSQLを使用していたのですが、途中でPostgreSQLのカスタマイズが必要になってソースから最新版をコンパイルしてインストールしていたのを思い出しました。その流れでパッケージ版PostgreSQLをアンインストールしていたので、DBD::Pg(perl-DBD-Pg)もアンインストールされていたのです。

 なら話は簡単yum install perl-DBD-Pgすりゃいいのか? とか思ったら、結局ソースからインストールされたPostgreSQLがインストールされちゃうというなんだかイヤな展開、、、もちろんmt-check.cgiで確認してもDBD::Pgは使えません、、、。
 それならCPANシェルからインストール、、、うまくいきません。じゃー、DBD::Pgのソースからインストール、、、うまくいきません。rpmでperl-DBD-Pg自体をインストール、、、うまくいきません。完全に泥沼です。

 で、モジュールの導入状況を確認すべく

# perl -e "use DBD::Pg"

としたら、こんなエラーが表示されるじゃないですか。

Can't load '/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/DBD/Pg/Pg.so' for module DBD::Pg: libpq.so.5: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.

なんか、まともにライブラリが見えない状況みたいですよね。でも、よくよく考えたら元々入っていたPostgreSQLをアンインストールした後にソース版をコンパイルしてインストールした後に、ソース版から入れた場合にはやらなきゃいけないことを完全に忘れていましたよ、、、。

PostgreSQL 8.4.4文書
第 15章ソースコードからインストール
15.6. インストール後の設定作業

ああ、これだわ。しばらく、元々CentOSに入っているPostgreSQLしか使っていなかったから完全に忘れてた。 /etc/ld.so.conf に /usr/local/pgsql/lib を加えて、、、あれ? /etc/ld.so.conf を見てみると、

include ld.so.conf.d/*.conf

だとか。いつの間にそんな構造に変わったんだろ。というわけで、 /etc/ld.so.conf.d/postgresql.conf とかを作って、

/usr/local/pgsql/lib

とだけ書き込みます。でもって、

# /sbin/ldconfig

を実行。mt-check.cgiを見るとちゃんとDBD::Pgをロードしてる、管理画面にアクセスしたら何事もなかったように管理メニューが表示されましたよっと。

 んー、久々にはまりましたねー、終電逃しましたねーー。でも、なんとか解決できてよかった。実は、この件、自分のブログでも発生していてその時は解決するのを諦めて、他サーバにソースとDBを一度持っていってexportでデータをexport。元のサーバをMySQLで再セットアップして、先ほどexportしたデータをimport。こちらも問題なく動作するんですけど、やっぱ直した方がすっきりしますよね。あの時にちゃんと直しておけば、問題なかったのにぃー。ちなみに、その時には自分のブログしかインストールされていないと思い込んでた、、、。