postgresql连接和设置自动提交关闭

rez*_*eza 1 postgresql perl autocommit dbi

我在perl中编程并且与postgres数据库有一个现有的连接(progammatically).建立连接后,我不控制连接代码,我想将自动提交设置为关闭.

怎么做到这一点?当我以交互方式进行时,我看不到任何变化.我设置了autocommit然后执行插入,我看到了更改.我做回滚,我得到的是没有交易存在.

我想设置autocommit,做我的工作,然后提交.如何通过现有连接实现这一目标?

谢谢Reza

Tom*_*zky 5

您不应该在连接中间禁用自动提交,因为它是意外的并且容易出错.

最好的方法是使用以下内容显式启动和结束事务:

$dbh->begin_work();
foreach($statement1, $statement2, $statement3) {
  $dbh->execute($_)
    or do { $dbh.rollback(); return -1 }
}
$dbh->commit();
Run Code Online (Sandbox Code Playgroud)

begin_work() 将暂时关闭自动提交,直到下次提交或回滚.

但如果你认为你真的需要伤害自己,那么perl不会阻止你:

$dbh->{AutoCommit} = 0;
Run Code Online (Sandbox Code Playgroud)