如何将现有的Dexie数据库迁移到新的Dexie数据库或如何重命名Dexie数据库?

时间:2018-03-22 07:54:08

标签: javascript html database migration dexie

我有使用Dexie包装器的web应用程序,因为某些原因我需要重命名现有的数据库,没有任何故障,我无法在Dexie文档中找到重命名。

1 个答案:

答案 0 :(得分:1)

不支持重命名数据库既不是Dexie也不是本机indexedDB。但您可以使用以下代码克隆数据库(未测试):

function cloneDatabase (sourceName, destinationName) {
  //
  // Open source database
  //
  const origDb = new Dexie(sourceName);
  return origDb.open().then(()=> {
    // Create the destination database
    const destDb = new Dexie(destinationName);

    //
    // Clone Schema
    //
    const schema = origDb.tables.reduce((result,table)=>{
      result[table.name] = [table.schema.primKey]
        .concat(table.schema.indexes)
        .map(indexSpec => indexSpec.src);
      return result;
    }, {});
    destDb.version(origDb.verno).stores(schema);

    //
    // Clone Data
    //
    return origDb.tables.reduce(

      (prev, table) => prev
        .then(() => table.toArray())
        .then(rows => destDb.table(table.name).bulkAdd(rows)),

      Promise.resolve()

    ).then(()=>{
      //
      // Finally close the databases
      //
      origDb.close();
      destDb.close();
    });
  });
}