wiki:SQLiteConverter

SQLiteファイルのバージョンを変換する。

 SQLite便利です。よく使います。 Tracのバックエンドでも使うし、 Djangoベースのちょっとしたウェブアプリのバックエンドでも使います。 そういや Ajax住所検索なんて物をだいぶ前に作りました。PHPだけど。

各種Linuxディストリビューションなどでは、バージョン2系とバージョン3系の2種類が混在して使用されています。 困るのは、これらバージョンでファイル構造が全く違うこと。 このTracのバックエンドでも、これまでバージョン2系を使っていました。 ↓訳あってバージョン3に変更したかったので、ファイル変換ツールを作りました。

作りましたってほどの事はありません。 SQLiteのコマンドラインツール(シェル)でダンプして、喰わせるだけです。

#!/bin/sh

if [ "$#" = 0 ]; then
  echo "Usage: $0 sqlite2-db-file..." 1>&2
  exit 1
fi

for fname in $*; do
  echo "Processing: $fname" 1>&2
  old="$fname"2
  mv "$fname" "$old"
  sqlite "$old" .dump | sqlite3 "$fname"
  eval "`stat --format='chmod %a \"$fname\"; chown %u:%g \"$fname\"' \"$old\"`"
done

ソースはこの辺にも。

訳あって

上記「訳あって」というのは、Tracの実装が「pysqlite2が入っているとpysqlite 1.0よりも優先する」というふうになっているからです。pysqlite2を入れたらいきなりTracが動かなくなって焦りました。どっちを使うか設定できればいいのになあ。

(2006/11/23 sgk)