2011-10-18 48 views
0

在Postgres中使用預準備語句時,我有幾個查詢要慢得多(這是一個已知問題,請參閱http://www.postgresql.org/docs/current/static/sql-prepare.html)。因此,我想關閉這些查詢的語句準備。使用Postgres在DBIx :: Class中禁用基於每個查詢的預準備語句

在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] }); 

但這也沒有幫助。

有什麼想法?

回答

1

我不使用DBD :: PG,所以我不能肯定地說,但這種-might-合作:

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