文档是关于DBD :: Pg的AutoCommit吗?

时间:2012-03-06 02:22:02

标签: perl postgresql dbi

来自docs

  

根据DBI规范,AutoCommit的默认值是真值。在此模式下,对数据库的任何更改都将立即生效。任何BEGINCOMMITROLLBACK语句都将被拒绝。 DBD :: Pg通过在执行语句之前立即发出BEGIN语句并在之后发出COMMIT来实现AutoCommit。

我的测试脚本:

#!/usr/bin/perl

use strict;
use warnings;
use DBI;

my $dbh = DBI->connect("dbi:Pg:dbname=test");
print "AutoCommit = $dbh->{AutoCommit}\n";
$dbh->do('INSERT INTO foo(x) VALUES (1)');

脚本输出:

  

AutoCommit = 1

我的日志(log_statement = 'all'):

  

2012-03-05 20:21:02 CST rootLOG:声明:INSERT INTO foo(x)VALUES(1)

(原谅我以root身份测试我的脚本!)

DBD :: Pg docs承诺BEGINCOMMIT我在哪里?

2 个答案:

答案 0 :(得分:1)

我猜测AutoCommit = 1的作用是将会话标记为服务器端的AUTOCOMMIT,请参阅http://www.postgresql.org/docs/9.1/static/ecpg-sql-set-autocommit.html。 为了确保我们必须查看dbi :: Pg源代码。

答案 1 :(得分:1)

我通过自己的测试得出结论,这是DBD :: Pg文档中的一个错误。因此,我已经向CPAN提交了Bug #82356,该协议已于2013年2月8日解决。