我正在使用 perl 进行编程,并且与我的 postgres 数据库有一个现有的连接(以编程方式)。建立连接后,我不控制连接代码,我想将自动提交设置为关闭。
如何做到这一点?当我以交互方式进行操作时,我看不到任何变化。我 \set autocommit off 然后进行插入,我看到了变化。我做了一个回滚,我得到不存在事务。
我想关闭自动提交,做我的工作然后提交。如何通过现有连接实现这一目标?
谢谢礼萨
我正在使用 perl 进行编程,并且与我的 postgres 数据库有一个现有的连接(以编程方式)。建立连接后,我不控制连接代码,我想将自动提交设置为关闭。
如何做到这一点?当我以交互方式进行操作时,我看不到任何变化。我 \set autocommit off 然后进行插入,我看到了变化。我做了一个回滚,我得到不存在事务。
我想关闭自动提交,做我的工作然后提交。如何通过现有连接实现这一目标?
谢谢礼萨
您不应该在连接中间禁用自动提交,因为它是意外且容易出错的。
最好的办法是使用如下方式显式地开始和结束事务:
$dbh->begin_work();
foreach($statement1, $statement2, $statement3) {
$dbh->execute($_)
or do { $dbh.rollback(); return -1 }
}
$dbh->commit();
begin_work()
将暂时关闭自动提交,直到下一次提交或回滚。
但是如果你认为你真的需要伤害自己,那么 perl 不会阻止你:
$dbh->{AutoCommit} = 0;