理系学生日記

おまえはいつまで学生気分なのか

sqlite でテーブルの主キーを変更する方法は?

CDTV のランキングデータを DB に突っ込むバッチ的プログラムを走らせておりましたところ、主キー制約違反でバッチが死にました。
元凶は 2010/08/07 付のランキングで、92 位がなぜか 2 つある。

ランキング用テーブルの主キーは日付 + 順位だったので、同じ順位が 2 つあると主キー制約違反で落ちるのは自然の摂理です。自然がぼくに牙をむいた。
ぼくは、これ CDTV の Web サイト側のミスなんじゃないかなって思ってるけど、真相は闇の中です。とにかく、この主キー制約違反をなんとかしないといけない。

仕方がないので主キーに曲名も加えることにしましたが、sqlite で主キーを変更するコマンドがどうにもこうにも見つからない*1
dump とって insert しなおすことにしました。

$ sqlite3 db/rank.db '.dump ranking' > ranking.dump
$ vi ranking.dump # 主キーにタイトルを加える
$ rm db/rank.db
$ sqlite3 db/rank.db '.read ranking.dump'

*1:存在するんなら教えてください