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 の接続処理が修正された」で。