c0d3man52

Webサイト制作

[CodeIgniter] SQLite3でマイグレーションをする テーブル削除(drop table)対応版

PHPで簡単にデータベースのバージョン管理ができるマイグレーションを、CodeIgniter + SQLite3の環境で使う際の問題点を解決しようとトライするシリーズ。今回は、drop table対応版です。

更新日: 2018.7.17公開日: 2017.10.24

CodeIgniter + SQLite3の環境でのマイグレーションの問題点

Migrationクラスの動きを確認してみたにも書いたのですが、CodeIgniter + SQLite3の環境でマイグレーションする場合は、

  1. テーブルを消すと、再度作成ができない
  2. カラムを消せない

という問題があります。

今回は(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);
}

次の課題:カラムを消せない

残った課題は、カラムの削除ですね。

いま、考えているのは、

  1. 一旦現在のデータを退避させて保存
  2. テーブルの構造を解析して保存
  3. テーブルを削除
  4. テーブル構造から指定のカラムを削除
  5. テーブル再作成
  6. 退避しておいたデータから指定のカラムのデータを削除
  7. データを復元

という流れで作る感じです。

ただ、そこまで作り込んでまでSQLiteを使う価値があるのかな?とも思っています。


つづく?