« Windowsのカーソルでウィンドウ... Main Firefoxの認証ツールチップがう... »

SQLiteバージョン共存

コマンドラインベースで使えるのはsqlite3になってるんだが、php5-sqliteはsqlite2でphpから作成したデータベースファイルがコマンドラインから使用できない。見ているとphp5-sqlite3というパッケージもあるらしく、これを使えるといいのだが、このサーバのVine4.2では、見つからないみたい?

で、apt-getで旧版のコマンドラインのsqliteもインストールできればまだいいのだが、こちらもパッケージが存在しないようで、リンク先を参考に手動でインストールした。g++がなかったので、そちらも先にインストールしておいた。

$ apt-get install gcc-c++
$ cvs -d :pserver:anonymous@www.sqlite.org:/sqlite login (パスワード anonymous)
$ cvs -d :pserver:anonymous@www.sqlite.org:/sqlite checkout -r version_2 -d sqlite2 sqlite
$ cd sqlite2; ./configure; make; make install

これでバージョン2のsqliteが使えるようになる。

作成されるデータベースファイルは両バージョンで互換性がないので、ダンプさせて移行する(逆に適用すればバージョン3→2も可能)。受け渡されるダンプ時のデータは通常のSQL文になっている。

$ sqlite foo.db .dump | sqlite3 foo-v3.db

データの漢字コードの変換が必要な場合は途中でnkfをかます(以下はEUC→UTF8の例)。

$ sqlite foo.db .dump | nkf -Ew | sqlite3 foo-v3.db

これまでファイルの拡張子を.dbにしているが、SQLiteの場合は.sqliteにするのが慣習なのか?(バージョン互換性がないなら、.sqlite3などともしないと混乱しそうですが…)。

そもそも、sqlite3にデータの移行ツールをつけといて欲しいところだけど、データ移行するには結局sqlite2が必要になるくらい大仰になるってことなのかも。

リンク

Leave a comment

Your comment