2012年11月1日木曜日

PHPUnitからPostgreSQLを使ってテストしたら「FATAL: remaining connection slots are reserved...」

PHPUnitでPostgreSQLを使ったテストを書いてみた。
個々のテストは動くのだけど、テストを一つにまとめてSuiteにすると

FATAL:  remaining connection slots are reserved for non-replication superuser connections
とエラーが続出した。

Googleで調べてみると、Rails、Hibernateなどでも似たような症状が報告されていたけど、解決法が見つからない。

「max_connectionを増やす」と良い、
と書いてあったのを見かけたが、増やすと今度は別のエラーで通らない。というかPostgreSQLが起動しなかったので論外。

9.0から9.2系にアップグレードしたけど、効果なし。
phpPgAdminが未対応で、そこでまた修正が出てきたり。

しかたがないのでPHPUnitの書き方を変更して対応。
単に、setupでPdoを生成してたのを、setUpBeforeClass内で行うように変更した。staticメソードなので、ちょっと修正は必要だったが。

class TestUsingPgSql extends \PHPUnit_Framework_TestCase {
   function setUp() {
        $pdo = new \Pdo( 'some dsn' );
    }
}

class TestUsingPgSql extends \PHPUnit_Framework_TestCase
{
   static function setUpBeforeClass() {
        $pdo = new \Pdo( 'some dsn' );
    }
    public function setUp() {
    }
}

単独でもsuite内で走らせても、問題なし。

しかし、PostgreSQLを使ったテストは3ファイルのみ。
もっとテストが増えてきたら対応できるのだろうか?


0 件のコメント: