使用Postgres在DBIx :: Class中基于每个查询禁用预准备语句

时间:2011-10-18 08:26:27

标签: postgresql dbix-class

在Postgres中使用预准备语句时,我有一些查询速度要慢得多(这是一个已知问题,请参阅http://www.postgresql.org/docs/current/static/sql-prepare.html)。因此,我想关闭这些查询的语句准备。

在DBIx :: Class中,我可以通过在connect_info中传递参数“pg_server_prepare => 0”来连接数据库时全局关闭预准备语句。但我无法看到如何为现有连接更改此设置。给定一个DBIx :: Class :: Schema,我尝试了这个:

$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 个答案:

答案 0 :(得分:1)

我没有使用DBD :: Pg,所以我不能肯定地说,但是这可能会有效:

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