通过 Perl 程序访问 SQLite 数据库,我可以使用
INSERT
和 DELETE
命令,但不能使用 VACUUM
,这会引发:
磁盘 I/O 错误
如果我以 root 身份运行该程序,则没有任何问题,因此一定是某些权限问题。我检查了该过程中涉及的每个文件的权限,应该没问题。 VACUUM 命令是否在数据库目录之外执行 I/O 操作?
my $dbh = DBI->connect("dbi:SQLite:someDB.db", undef, undef, {RaiseError => 1, AutoCommit => 1});
my $sth = $dbh->prepare("VACUUM;");
$sth->execute;
如果您想查看在
VACUUM
期间执行的 I/O 操作,您可以使用 strace。它将列出 SQLite 执行的所有系统调用,包括磁盘 IO。
strace sqlite3 someDB.db 'VACUUM;'