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

如何从knex.js连接获取底层better-sqlite3连接以使用backup方法?

获取Knex.js中的better-sqlite3原生连接以调用backup方法

要拿到Knex封装的better-sqlite3原生连接,需要从Knex的连接池里直接获取底层资源,具体步骤如下:

  • 从Knex实例的client.pool中调用acquire()方法获取连接资源(该方法返回Promise)
  • 资源对象的connection属性就是better-sqlite3的原生数据库实例,可直接调用其backup()方法
  • 操作完成后务必释放连接回池,避免资源泄漏

代码示例

async function runSqliteBackup(knex, backupFilePath) {
  // 从连接池获取连接资源
  const connResource = await knex.client.pool.acquire();
  try {
    // 拿到better-sqlite3原生连接实例
    const sqliteNativeConn = connResource.connection;
    // 调用原生backup方法
    sqliteNativeConn.backup(backupFilePath);
  } finally {
    // 释放连接回池,必须执行
    knex.client.pool.release(connResource);
  }
}

// 使用方式
// runSqliteBackup(yourKnexInstance, './backup_database.db');

注意事项

  • 调用backup()期间,同一连接上的数据库变更会被自动包含,无需关闭Knex连接
  • 避免在备份时执行长时间运行的事务,防止备份过程被阻塞
  • 该方式依赖Knex的内部结构(当前Knex 2.x+版本稳定可用),后续版本若有底层结构变更需同步调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:02:33