DBD::Pg中的手动事务管理



我很难让手动事务按照DBD::Pg文档的方式工作,或者我只是误解了文档。

我的理解是,如果我想手动管理事务,我应该关闭AutoCommit。

$dbh->{AutoCommit} = 0;
$dbh->begin_work;

但是当我这样做的时候,我得到了连续的错误

DBD::Pg::db begin_work failed: Already in a transaction

要使其工作,我需要首先打开AutoCommit。

$dbh->{AutoCommit} = 1;
$dbh->begin_work;

但这似乎与任何文档都不一致。

我只是误解了吗?

我的理解是,如果我想手动管理事务,我应该关闭AutoCommit。

正确的。

但是,DBD::Pg会自动为您启动事务。您不能手动启动事务。最好的选择是关闭自动提交,然后执行:

 $dbh->commit;

,当您准备提交时。这将提交现有事务并启动新事务。

现在,如果您将autocommit设置为on,那么任何存在于事务之外的东西都将成为它自己的事务,每个语句一个事务。如果您希望确保手动管理事务,则需要将其设置为关闭。

我的理解是,如果我想手动管理事务,我应该关闭AutoCommit。

不,恰恰相反。将AutoCommit设置为0会启动一个事务,因此您希望将其设置为1。自动提交更改(AutoCommit => 1)是让数据库不使用事务,这与您想要的相反。

相关内容

  • 没有找到相关文章

最新更新