为什么$dbh-> do(‘VACUUM’)失败了Perl的DBD :: SQLite?
发布时间:2020-12-15 23:26:13 所属栏目:大数据 来源:网络整理
导读:我想在Perl上的SQLite数据库上的特定时间做VACUUM,但它总是说 DBD::SQLite::db do failed: cannot VACUUM from within a transaction 那我该怎么做? my %attr = ( RaiseError = 0,PrintError = 1,AutoCommit = 0 );my $dbh = DBI-connect('dbi:SQLite:dbnam
我想在Perl上的SQLite数据库上的特定时间做VACUUM,但它总是说
那我该怎么做? my %attr = ( RaiseError => 0,PrintError => 1,AutoCommit => 0 ); my $dbh = DBI->connect('dbi:SQLite:dbname='.$file'','',%attr) or die $DBI::errstr; 我正在使用AutoCommit => 0.错误发生在: $dbh->do('DELETE FROM soap'); $dbh->do('DELETE FROM result'); $dbh->commit; $dbh->do('VACUUM'); 解决方法
我假设你有AutoCommit =>连接调用中为0,因为以下工作原理:
#!/usr/bin/perl use strict; use warnings; use DBI; my $dbh = DBI->connect('dbi:SQLite:test.db',undef,{ RaiseError => 1,AutoCommit => 1} ); $dbh->do('VACUUM'); $dbh->disconnect; 您不必放弃能够进行VACUUM的事务:您可以使用以下内容以便为VACUUM打开AutoCommit,并在VACUUM之后将AutoCommit状态恢复为它的状态.如果未设置RaiseError,请添加错误检查. sub do_vacuum { my ($dbh) = @_; local $dbh->{AutoCommit} = 1; $dbh->do('VACUUM'); return; } 叫它: do_vacuum($dbh); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |