来自docs:
根据DBI规范,AutoCommit的默认值是真值。在此模式下,对数据库的任何更改都将立即生效。任何
BEGIN
,COMMIT
或ROLLBACK
语句都将被拒绝。 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承诺BEGIN
和COMMIT
我在哪里?
答案 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日解决。