如何从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
相关产品推荐
相关产品推荐

