postgresのextension not found

postgresを利用してテスト環境を構築することになった時のお話です。

バックアップやリストが簡単なこともあって、1から構築を依頼された時はmysqlをオススメしていますが、既に構築済のお客様の中にはpostgresという場合も多々あります。お客様にテスト環境をご用意いただけない事もあるので、LAMPのテストサーバーにpostgresのインストールをすることになりました。

そこで罠にハマりました。

今回早急に対応しなければならなかったお客様がなんとEC-CUBE2.4!私は動いている2.4を初めてみたのですが、相方さんはそうでもないらしく、「懐かしいー!!!」と大ハシャギしていました。

動いているものが古くてもやることは変わらないです。
本番サーバーからソースを取得してテスト環境に反映!DBからdumpしてsqlファイルも取得!!

私達のテスト環境は模範的LAMP環境でpostgresが入っていななかったので、インストールと初期設定。

下記サイトを参考にしました。
CentOS 6 – PostgreSQL – インストール : Server World

お客様の本番環境と同じIDとパスワードを作成し、同じ名称のデータベースを作成。権限も同じ状態にし、いざ表示!!!

 

真っ白!!!

 

えー・・・・、DBのユーザー名もあってる・・・
パスワードもデータベース名もあってる・・・
ホストもあってる・・・
ターミナルからの「psql -h 127.0.0.1 -U username -d データベース名」で接続できてる・・・
(この時、「ident認証に失敗しました」が出る問題にぶち当たったのですが、今回とは別なのでまた別の記事にします!)

エラーログを見ると…

PHP Fatal error:  Call to undefined method DB_Error::getCol() in /xxx/xxx/data/class/SC_DbConn.php on line 139

この139行目は、こんな内容です。

$result = $this->conn->getCol($n, $col);

つまり、この「$this->conn」のオブジェクトにgetCol関数がないよと言っているようです。

$this->connをvar_dumpしてみるとことにしました。
すると…

DB Error: extension not found

なるerrorが出ていました。「エクステンションがない」と言っています。

。。。はっ!!!そうですよね!!!

PHPからpostgresに接続する時には、extensionがないとダメでした。

そうでしたそうでした。<(‘-‘;)

ここまで分かれば早いですね!

1. yumでさくっとPHPのpostgres接続のためのモジュールをインストール

yum install php-pgsql

2.モジュールファイルの場所をチェック

/usr/lib/php/modules/pgsql.soだったり、/usr/lib64/php/modules/pgsql.soだったり。
バージョンや環境によって若干違いますがfindするとさくっと見つかります。

find / -name pgsql.so

3.php.iniに設定する

php.iniにextensionを設定します。

vi /etc/php.ini

extension_dir=”/usr/lib64/php/modules”
extension=pgsql.so

extension_dirがすでに設定されている時は、手順2で探したsoファイルを、記載済のextension_dirにコピーするといいです。

4.Apacheの再起動

再起動したらphp.iniも反映されるはずですね!

service httpd restart

ドキドキしながら再度アクセスしてみると…ちゃんと表示されていました!よかったー。

これまでmysqlのみだったのにpostgresが必要になった時に、extensionは忘れがちです。
ログイン情報があってるのに、という場合は、サーバー環境もチェックしてみましょう!


投稿日

カテゴリー:

投稿者: