Search code examples
javascripthtmldatabasemigrationdexie

How to migrate existing Dexie database to new Dexie database or How to rename Dexie database?


I have web application which uses Dexie wrapper for indexedDB, for some reason i need to rename existing Database with no glitch, i couldn't find renaming on Dexie documentation.


Solution

  • There's no support to rename a database is neither Dexie or native indexedDB. But you can clone a database using the following piece of code (not tested):

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