2011-10-18 5 views
0

Postgresでプリペアドステートメントを使用するとかなり遅くなる質問があります(これは既知の問題です。http://www.postgresql.org/docs/current/static/sql-prepare.htmlを参照)。したがって、これらのクエリの文準備を無効にしたいと考えています。DBIx :: ClassでPostgresを使用してプリペアドステートメントを無効にする

DBIx :: Classでは、connect_infoにパラメータ "pg_server_prepare => 0"を渡して、データベースに接続するときに準備された文をグローバルにオフにできます。既存の接続でこれを変更する方法はわかりません。 DBIx ::クラス::スキーマ与え、私はこの試みた:

$schema->storage->connect_info->[0]->{'pg_server_prepare'} = 0; 

を私はその呼び出しの後connect_infoをログに記録した場合、私はこのパラメータの新しい値を参照してくださいが、データベースドライバがまだ準備されたステートメントを使用しています。私も切断して再接続しようとしました

$schema->storage->connect_info->[0]->{'pg_server_prepare'} = 0; 
$schema->storage->disconnect; 
$schema->connect(@{ $schema->storage->connect_info->[0] }); 

しかし、これも役に立たなかったです。

任意のアイデア?私は、私は確かに言うことができない、DBD :: Pgのを使用していないんだけど、これが動作する-might-

答えて

1

$schema->storage->dbh_do(sub { 
    my (undef, $dbh) = @_; 
    local $dbh->{pg_server_prepare} = 0; 
    # now do anything with $dbh you want 
}); 
関連する問題