我很难让手动事务按照 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;
但这似乎与任何文档都不一致。
我是不是误会了?
最佳答案
My understanding is that if I want to manually manage transactions, I should turn off AutoCommit.
正确。
但是,DBD::Pg 会自动为您启动事务。您无法手动启动交易。您最好的选择是关闭自动提交,然后执行以下操作:
$dbh->commit;
当你准备好提交时。这将同时提交现有事务并启动新事务。
现在,如果您将自动提交设置为开,则任何存在于事务之外的事物都将成为其自身的事务,每个语句一个事务。如果您想确保手动管理事务,您希望将其关闭。
关于perl - DBD::Pg 中的手动事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078913/