You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测现有PouchDB数据库使用的IndexedDB适配器类型

PouchDB 存量数据库适配器类型判定方法

两种适配器的底层存储规则存在明确差异,有两种可靠的零风险判定方案,不会损坏存量数据:

方案1:零侵入检测(推荐,无需初始化PouchDB实例)

两种适配器在浏览器IndexedDB中创建的底层库名前缀完全不同,可以直接通过浏览器IndexedDB接口检测,不会触发新库创建逻辑:

  • idb适配器生成的底层IndexedDB库名格式为:_pouch_<你的业务数据库名>,前缀为带下划线的_pouch_
  • indexeddb适配器生成的底层IndexedDB库名格式为:pouchdb_<你的业务数据库名>,前缀为不带下划线的pouchdb_

直接运行以下检测代码即可:

async function getPouchDBAdapterType(targetDbName) {
  const existingIndexedDbs = await indexedDB.databases();
  const dbNameSet = new Set(existingIndexedDbs.map(item => item.name));

  if (dbNameSet.has(`_pouch_${targetDbName}`)) {
    return 'idb';
  }
  if (dbNameSet.has(`pouchdb_${targetDbName}`)) {
    return 'indexeddb';
  }
  return null; // 未找到对应存量数据库
}

// 调用示例:检测名为user_data的业务库适配器
getPouchDBAdapterType('user_data').then(type => {
  console.log('存量库适配器类型:', type);
});

方案2:实例属性读取(适合已经完成PouchDB初始化的场景)

PouchDB实例初始化完成后,会在实例上挂载adapter属性直接标识当前使用的适配器类型,直接读取即可:

// 注意:初始化时不要手动指定adapter参数,否则会强制使用指定适配器创建新实例
const db = new PouchDB('user_data');
console.log(db.adapter); // 输出值为'idb' 或 'indexeddb'

注意事项:检测前不要在初始化PouchDB时手动传入adapter配置,如果传入的适配器和存量库不匹配,PouchDB会直接创建空的新库,无法读取原有存量数据,优先使用方案1做前置检测。

内容的提问来源于stack exchange,提问作者Andrey Kiyanovsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 06:39:27