IDBObjectStore: deleteIndex() メソッド

IDBObjectStore インターフェイスの deleteIndex() メソッドは、バージョンの更新時に用いられ、接続中のデータベース内の指定した名前のインデックスを破棄します。

なお、このメソッドは VersionChange トランザクションモードのコールバックからのみ呼び出せます。また、このメソッドは IDBObjectStore.indexNames プロパティを同期的に変更します。

注: この機能は Web Worker 内で利用可能です。

構文

js
deleteIndex(indexName)

引数

indexName

削除する既存のインデックスの名前です。

返値

なし (undefined)

例外

InvalidStateError DOMException

このメソッドが versionchange トランザクションモードのコールバックから呼ばれていないとき投げられます。

TransactionInactiveError DOMException

この IDBObjectStore が属するトランザクションが実行中でない (たとえば、削除されたか取り除かれた) とき投げられます。

NotFoundError DOMException

指定された名前のインデックス (大文字と小文字を区別します) がデータベースに無いとき投げられます。

以下の例では、より高いバージョン番号のデータベースが読み込まれたときにデータベースの構造を更新する onupgradeneeded のハンドラーがあります。IDBObjectStore.createIndex を用いてオブジェクトストアに新しいインデックスを作成し、その後 deleteIndex() を用いて不要な古いインデックスを削除します。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)

js
let db;

// データベースを開く
const DBOpenRequest = window.indexedDB.open("toDoList", 4);

// 以下の 2 個のイベントハンドラーは、データベースを開くのに成功したか、失敗した時に動く
DBOpenRequest.onerror = (event) => {
  note.innerHTML += "<li>データベース読み込みエラー</li>";
};

DBOpenRequest.onsuccess = (event) => {
  note.innerHTML += "<li>データベースを初期化しました。</li>";

  // データベースを開いた結果を変数 db に格納する。これは後でよく使う
  db = event.target.result;

  // displayData() 関数を実行し、IDB に格納済の to-do リストデータすべてをタスクリストに入れる
  displayData();
};

// このイベントは、新しいバージョンのデータベースの作成が必要な場合を処理します。
// これは、データベースが作成されていなかったか、
// 前の行の window.indexedDB.open で新しいバージョン番号が指定された場合です。
// これは最近のブラウザーでしか実装されていません。
DBOpenRequest.onupgradeneeded = (event) => {
  const db = event.target.result;

  db.onerror = (event) => {
    note.innerHTML += "<li>データベースの読み込みエラー</li>";
  };

  // このデータベース用の objectStore を作成する
  const objectStore = db.createObjectStore("toDoList", {
    keyPath: "taskTitle",
  });

  // objectStore に格納するデータアイテムを定義する

  objectStore.createIndex("hours", "hours", { unique: false });
  objectStore.createIndex("minutes", "minutes", { unique: false });
  objectStore.createIndex("day", "day", { unique: false });
  objectStore.createIndex("month", "month", { unique: false });
  objectStore.createIndex("year", "year", { unique: false });
  objectStore.createIndex("notified", "notified", { unique: false });

  objectStore.deleteIndex("seconds");
  objectStore.deleteIndex("contact");
};

仕様書

Specification
Indexed Database API 3.0
# ref-for-dom-idbobjectstore-deleteindex①

ブラウザーの互換性

BCD tables only load in the browser

関連情報