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

标签 perl postgresql dbi 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;

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

我是不是误会了?

最佳答案

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/

相关文章:

postgresql - Heroku 上的 em_postgresql

SQL聚合函数选择唯一值

sql - 在mysql中, "explain ..."总是安全的吗?

mysql - Perl DBI 一次执行多个 SQL 查询

oracle - 在perl脚本中调用带有输入参数和输出光标的存储过程

perl - Moose 在调用 Clearer 后是否有义务再次调用 Builder?

perl 文件大小计算不起作用

arrays - Perl - 连接数组元素直到指定长度

Perl错误: 'use of uninitialized value in concatenation (.) or string' using hash

postgresql - 使用 Makefile 向 Postgresql 添加新的源代码文件