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);
}