Catalystを使ってみようとしたらSQLiteでハマる件

Catalyst::Manual::Tutorial とか見ながら Catalyst をいじっていたところ,

$ script/hoge_create.pl model CDBI CDBI dbi:SQLite:/hoge/hoge.db

とかやったあたりで、

DBD::SQLite::db prepare failed: unsupported file format(1) at dbdimp.c line 269 (以下略)

プギャー。
原因は,db 作るのに使った sqlite (最新)が

$ sqlite3 -version
3.3.4

Catalyst で使ってる DBD::SQLite (1.11; 最新のはず) の中身が,

$ perl -e 'use DBD::SQLite;print "$DBD::SQLite::sqlite_versionn";'
3.2.7

で,http://www.sqlite.org/ によれば,

2006-Jan-10 – Version 3.3.0 alpha
(中略)
The file format for version 3.3.0 has changed slightly in order provide a more efficient encoding of binary values. SQLite 3.3.0 will read and write legacy databases created with any prior version of SQLite 3. But databases created by version 3.3.0 will not be readable or writable by earlier versions of the SQLite. The older file format can be specified at compile-time for those rare cases where it is needed.

でまあ、逆なら読めるんだけど、今回の場合はダメ。
以上,Google 先生に訊いてもわからなかったので一応メモ。
SQLite 2 と 3 の非互換の話はよくあるんだけれども。
えーと,それで対応は,
1. sqlite3.2.x をインストール
2. DBD::SQLite の中身を 3.3.x に置き換える
3. 他のDBを使う
4. 寝る
とりあえず 4. で。

「Catalystを使ってみようとしたらSQLiteでハマる件」への2件のフィードバック

  1. 自分も4.選択中です!
    SQLite3.exeではなくてDBD::SQLiteからCREATE TABLE すると
    なんとなく使えてたが、SQLite3.exeからVACCUMするとおかしくなります。
    まあ、当たり前か。DBD::SQLiteからVACUUMするべき?
    でもCPANにDBD-SQLite-1.12がUPされてたぞ。
    SQLite3.3.5相当。
    ActivePerlなんでPPMへのアップロード待ちでもう少し4.。

  2. えすと

    情報ありがとうございます。
    DBD::SQLiteだけで全部済ませるという手も後で思いついたのですが、どうせそのうち 3.3.x ベースになるだろうと思って放置してました。
    DBD-SQLite-1.12で解決のようですね。
    仕事が立て込んでるので、もうしばらく放置。

コメントは受け付けていません。