[CodeIgniter] SQLite3でマイグレーションをする テーブル削除(drop table)対応版
PHPで簡単にデータベースのバージョン管理ができるマイグレーションを、CodeIgniter + SQLite3の環境で使う際の問題点を解決しようとトライするシリーズ。今回は、drop table対応版です。
更新日: 2018.7.17公開日: 2017.10.24
CodeIgniter + SQLite3の環境でのマイグレーションの問題点
Migrationクラスの動きを確認してみたにも書いたのですが、CodeIgniter + SQLite3の環境でマイグレーションする場合は、
- テーブルを消すと、再度作成ができない
- カラムを消せない
という問題があります。
今回は(1)のテーブル削除に対応した、CodeIgniter + SQLite3の環境でマイグレーション方法を考えてみました。
ちなみに、「SQLiteなんだから、DBファイルをそのままアップすればいいじゃないか」というツッコミはご容赦くださいませ。
テーブル削除(drop table)対応版
完璧に解決はできてませんが、とりあえず使えるレベルのものを考えてみました。
DROP TABLE && VACUUMする
ここは意外と単純で、「DROP TABLE」クエリでテーブルを削除して、「VACUUM」クエリでデータベースの掃除を実行すればOKでした。
public function down() {
//テーブル落とす(インデックスも同時に消える)
$sql = "DROP TABLE articles";
$this->db->query($sql);
//掃除
$sql = "VACUUM";
$this->db->query($sql);
}
次の課題:カラムを消せない
残った課題は、カラムの削除ですね。
いま、考えているのは、
- 一旦現在のデータを退避させて保存
- テーブルの構造を解析して保存
- テーブルを削除
- テーブル構造から指定のカラムを削除
- テーブル再作成
- 退避しておいたデータから指定のカラムのデータを削除
- データを復元
という流れで作る感じです。
ただ、そこまで作り込んでまでSQLiteを使う価値があるのかな?とも思っています。
つづく?