SQLiteのテーブルスキーマ変更機能は貧弱
SQLiteのテーブルスキーマ変更機能は貧弱でカラムの削除やインデックスの削除ができない。
公式FAQ SQLite Frequently Asked Questions に回避策が書いてあるが、以下の手順をたどる必要がある。
- 新しいスキーマと同一のスキーマを持つ一時テーブルを作成。
- 一時テーブルに元のテーブルの情報をコピー。
- 元のテーブルを削除。
- 新しいスキーマをもつテーブルを作成。
- 一時テーブルのデータを新しいテーブルにコピー
- 一時テーブルを削除。
RDBのデータの保持の仕方を考えると、通常のRDBでも内部的には似たような挙動になっているのだろうが、それを開発者がやらないといけないというのは面倒。
内部的にこの挙動でもいいのだが、ALTER TABLEでできるようにして欲しい。
スキーマの変更コストを明確にしたいがため、このようにしているのかも知れないけど。