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

R语言中使用DBI断开DuckDB后重连提示文件被占用

DuckDB断开重连报错的解决方法

问题出在DuckDB的连接断开逻辑上——默认调用dbDisconnect()并不会彻底关闭数据库引擎进程,导致数据库文件被持续锁定,无法立即重连。而SQLite的连接断开会直接释放文件锁,所以不会出现这个问题。

修正方案

在调用dbDisconnect()时添加shutdown = TRUE参数,强制关闭DuckDB引擎并释放所有资源:

library("DBI")
con2 <- dbConnect(duckdb::duckdb(), dbdir="my-db.duckdb", read_only = FALSE)
dbListTables(con2)
dbWriteTable(con2, "mtcars", mtcars)
dbListTables(con2)
# 断开时强制关闭引擎,释放文件锁
dbDisconnect(con2, shutdown = TRUE)
# 现在可以正常重连
con2 <- dbConnect(duckdb::duckdb(), dbdir="my-db.duckdb", read_only = FALSE)

补充说明

  • DuckDB默认保留后台引擎是为了复用连接提升性能,但这会导致文件持续被占用;shutdown = TRUE会彻底终止引擎进程,释放文件锁。
  • 如果存在多个指向同一数据库的连接,需要确保所有连接都执行带shutdown = TRUE的断开操作,否则文件锁依然存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:35:28