如何重置DuckDB数据库文件存储大小?删除表后怎样缩减文件体积?
缩减DuckDB数据库文件大小的实用方法
- 执行
VACUUM命令
DuckDB不会自动回收删除表/数据后空出的空间,必须手动触发空间回收。在Python里直接通过连接执行即可:
import duckdb with duckdb.connect("your_db.db") as conn: conn.execute("VACUUM")
这个命令会重写整个数据库文件,把未使用的空间还给操作系统。注意执行时要确保没有其他程序在连接这个数据库。
- 导出重建数据库
如果VACUUM效果不理想,或者需要彻底清理,就把有用的数据导出来,再重建数据库:
- 导出需要保留的表到Parquet或CSV(Parquet更高效):
with duckdb.connect("your_db.db") as conn: conn.execute("COPY keep_table TO 'keep_table.parquet' (FORMAT PARQUET)") # 多个表就循环处理每个要保留的表
- 删除原数据库文件,新建数据库并导入数据:
import os os.remove("your_db.db") with duckdb.connect("your_db.db") as new_conn: new_conn.execute("COPY keep_table FROM 'keep_table.parquet' (FORMAT PARQUET)")
这种方式能彻底清除所有冗余空间,适合数据量不大的场景。
- 用
VACUUM FULL(DuckDB 0.9.0及以上)
如果你的DuckDB版本是0.9.0或更新,试试VACUUM FULL命令,它比普通VACUUM更彻底,能释放所有未被使用的空间:
with duckdb.connect("your_db.db") as conn: conn.execute("VACUUM FULL")
- 清理残留临时文件
如果数据库曾经异常终止,可能会在同目录下留下.tmp结尾的临时文件,这些文件不会自动清理。先关闭数据库连接,然后删除这些临时文件也能节省空间。
内容的提问来源于stack exchange,提问作者Islam Mammadov
相关产品推荐
相关产品推荐

