从docs:文档是否对DBD :: Pg的AutoCommit说谎?
按照DBI规范自动提交默认为真值。在此模式下,对数据库的任何更改立即生效。任何
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)');
脚本输出:
自动提交= 1
我的日志(与log_statement = 'all'
):
2012-03-05 20点21分02秒CST rootLOG:语句:INSERT INTO FOO(X)VALUES(1)
(!原谅我测试我的脚本根)
在哪里BEGIN
和COMMIT
我是由DBD :: Pg文档承诺的?
@AntonioDolcetta:确实如此,但测试结果与我放入其中的任何陈述相同。问题已更新。 – Flimzy 2012-03-06 03:01:39
粗体引用的句子似乎实际上描述了(尽管不清楚)AutoCommit为OFF时会发生什么。当AutoCommit为ON时,由于PostgreSQL服务器将立即提交任何SQL语句,除非事务先前已用BEGIN语句启动,否则无事可做。 SQL服务器本身不支持自动提交ON/OFF,这是DBI文档所指的“必须显式启动事务的数据库” – 2012-03-07 03:33:16