雑文発散

«前の日記(2008-05-27) 最新 次の日記(2008-05-29)» 編集
過去の日記

2008-05-28 [長年日記]

[PHP][PostgreSQL] CakePHP 1.2 で PostgreSQL を使うと問答無用で「持続的接続」になる(今のところ)

CakePHP 1.2では、データベースの設定(app/config/database.php)内の persistent パラメータによって、コネクションを「持続的接続」にするか否かを選択できるようになっている。

デフォルトでは持続的接続(pg_pconnect)のようなのだが、そうじゃない接続(pg_connect)を使いたかったので、次のように定義をしていた。

var $default = array(
                     'driver'     => 'postgres',
                     'persistent' => false,
                     'host'       => 'localhost',
                     'port'       => '5432',
                     'login'      => 'suzuki',
                     'password'   => 'xxxxxxxx',
                     'database'   => 'suzuki',
                     'schema'     => 'public',
                     'prefix'     => '',
                     'encoding'   => ''
);

すっかり「これでOK!」と思って開発をしていたのだが、ふとプロセス状態を見たら、PostgreSQL のコネクションが残ったままになっているのが見えた。

「あれ?なにこのコネクションは?」と思って、ウロウロと調べていたら、結局 PostgreSQL 用のファイル(cake/libs/model/dbo/dbo_postgres.php)内で persistent パラメータの処理が実装されていなかったというオチ。。。

バグというか実装漏れっぽいステータスなんだけど、とりあえずチケットと MySQL での実装を参考に作ったパッチを上げてみた。

あ、ちなみに 1.1 と同じく connect パラメータによる接続関数名の指定もできるので、'connect' => 'pg_connect' と書けば回避できる問題ではあるんだけどね。

【2008/06/03 追記】CakePHP 1.2.x.x 先端ではこの問題が修正された。また、connect パラメータは削除され、CakePHP 1.2 では利用できなくなった。詳しくは「CakePHP 1.2 + PostgreSQL の接続処理が修正された」で。