Indexed Databaseのアップグレードは、DBのオープン時にアップグレードバージョンを指定し、イベントハンドラonupgradeneededで検知してそこで一連のマイグレーション処理を行えば良さそうです。
DBの新規作成処理の例
// Indexed DBの操作をするためのオブジェクト取得 var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB; // Indexed DBのオープン var request = indexedDB.open("sample"); // DBの新規作成 request.onupgradeneeded = function() { console.log("onupgradeneeded"); // オブジェクトストアの作成、初期データの追加等 idb = request.result; var store = idb.createObjectStore("member", {keyPath: "userId"}); store.put({userId: "00000001", name: "hoge", age: 27}); store.put({userId: "00000002", name: "piyo", age: 27}); } // 処理成功時のイベントハンドラ request.onsuccess = function(event) { console.log("onsuccess"); console.log(request.result.version); // 作成した段階ではversion = 1 }
1回目の実行ではonupgradeneededとonsuccessが順番に呼ばれますが、2回目以降はonsuccessのみ呼ばれます。
DBのアップグレード処理の例
// Indexed DBの操作をするためのオブジェクト取得 var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB; // Indexed DBのオープン var request = indexedDB.open("sample", 2); // versionを指定 // DBのアップグレード request.onupgradeneeded = function() { console.log("onupgradeneeded"); // マイグレーション処理 } // 処理成功時のイベントハンドラ request.onsuccess = function(event) { console.log("onsuccess"); console.log(request.result.version); // 指定されたバージンに更新されている(version = 2) }
indexedDB.openにローカルのversionよりも大きいversionを指定すると、onupgradeneededが呼ばれます。この中でDBが新規か更新かを判定してマイグレーション処理を行えば良さそうです。処理成功時はversionが更新されています。
関連記事:
minor.hatenablog.com