避免在 sqlite 数据库中创建 db-WAL db-shm 文件

问题描述 投票:0回答:2

我正在使用 python 模块 sqlite3 读取存储在 .db 文件中的数据

我意识到,尽管我以只读模式读取文件并且连接已正确关闭,但 .db-wal 和 db-shm 仍保留在服务器中

由于数据每10分钟存储在数据库文件中,它可以在服务器中创建一堆文件

我读了一些关于 WAL 方法和 PRAGMA 的内容,但我无法得到关于如何避免创建它们或确保它们在连接关闭后被删除的明确解释。尝试手动删除它们不是一个选项,因为它们存储在我没有写访问权限的服务器中

python sqlite
2个回答
1
投票

首先,您不想对这些文件执行任何操作。其次,每个数据库创建此文件之一。如果在连接关闭后保留此文件,则下次连接时不会创建新文件,但将使用现有文件。不要扰乱数据库的正常运行。


0
投票

您可以通过以下方式禁用 SQLite 数据库本身的 WAL 模式(它是数据库的属性,而不是连接):

$ sqlite3 data/ratelimits.db
SQLite version 3.43.0 2023-08-24 12:36:59
Enter ".help" for usage hints.
sqlite> pragma journal_mode;
delete
sqlite> pragma journal_mode=wal;
wal
sqlite>

就你而言,你听起来像是想禁用 WAL,所以我认为你想设置

pragma journal_mode=delete
来代替。

请注意,您应该避免自己删除这些文件,因为预写日志 (.db-wal) 可能包含有关最近事务的信息。当 SQLite 工作时,或者当您禁用 WAL 时,它应该被自动删除。

© www.soinside.com 2019 - 2024. All rights reserved.