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

Mic*_*ier 8 postgresql perl dbi dbd-pg

我正在努力让手动交易按照DBD :: Pg中的说明工作,或者我只是误解了所述文档.

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

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

但是当我这样做时,我会遇到连续的错误

DBD::Pg::db begin_work failed: Already in a transaction
Run Code Online (Sandbox Code Playgroud)

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

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

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

我只是误解了吗?

ike*_*ami 4

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

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

  • 公平地说,只有当您意识到 autocommit=0 为您发送 BEGIN 时,它才有意义 (2认同)