1

我正在使用 perl 进行编程,并且与我的 postgres 数据库有一个现有的连接(以编程方式)。建立连接后,我不控制连接代码,我想将自动提交设置为关闭。

如何做到这一点?当我以交互方式进行操作时,我看不到任何变化。我 \set autocommit off 然后进行插入,我看到了变化。我做了一个回滚,我得到不存在事务。

我想关闭自动提交,做我的工作然后提交。如何通过现有连接实现这一目标?

谢谢礼萨

4

1 回答 1

5

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

最好的办法是使用如下方式显式地开始和结束事务:

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

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

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

$dbh->{AutoCommit} = 0;
于 2010-11-03T16:31:02.463 回答