從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