4 月 21
ひさしぶりに、 SQLite を触ってみたら変なエラーが出たのでメモ。
- 環境
- Windows XP SP2
- FedoraCore7 on coLinux
- SQLite 3.4.2
perl から sqlite を操作しても、 sqlite3 のコンソールから直接操作しても、cofs 上の database ファイルは扱えなかった。
※ファイルの作成はできるけど、 CREATE DATABASE とかの操作をすると
disk I/O error(10) at dbdimp.c line 403
解決策は、データベースを保存する場所を、cofs じゃない場所にしただけ。
tmpfs 上、ext3 上にデータベースを作成した場合はOKだった。
#!/bin/perl
use strict;
use warnings;
use DBI;
my $dbname;
$dbname = 'test.db'; # OK:ext*,tmpfs NG:cofs
unlink($dbname) if (-e $dbname); # テストだから毎回新規作成したい
unless (-e $dbname) {
my ($dbh, $sql, $rc);
$dbh = DBI->connect("dbi:SQLite:dbname=$dbname", "", "", {PrintError=>0});
die "Error: $DBI::errstr\n" unless ($dbh);
# cofs の時は CREATE のタイミングで↓のエラーが発生する
# disk I/O error(10) at dbdimp.c line 403
$sql = "CREATE TABLE users (id integer primary key, name varchar(32), age integer)";
$rc = $dbh->do($sql);
print "$DBI::errstr\n" unless ($rc);
}