Macos iMessage应用程序存储位置-为什么chat.db-wal会立即更新,但chat.db需要一段时间?

Macos iMessage应用程序存储位置-为什么chat.db-wal会立即更新,但chat.db需要一段时间?,macos,sqlite,imessage,Macos,Sqlite,Imessage,因此,在iMessages上玩游戏,想办法备份它们和各种各样的东西 我在~/Library/Messages上找到了它们的位置 有三个文件 1. chat.db 2. chat.db-wal 3. chat.db-shm 如果我运行一个节点脚本,在向某人发送iMessage时监视文件更改,我会看到chat.db-wal立即更改,但chat.db需要一段时间才能更新 我希望尽快收到这些消息,但我不确定我是否能阅读.db wal文件。有人知道我能不能读那个文件吗?或者为什么.db文件似乎需要更长的

因此,在iMessages上玩游戏,想办法备份它们和各种各样的东西

我在~/Library/Messages上找到了它们的位置

有三个文件

1. chat.db
2. chat.db-wal
3. chat.db-shm
如果我运行一个节点脚本,在向某人发送iMessage时监视文件更改,我会看到chat.db-wal立即更改,但chat.db需要一段时间才能更新

我希望尽快收到这些消息,但我不确定我是否能阅读.db wal文件。有人知道我能不能读那个文件吗?或者为什么.db文件似乎需要更长的时间来更新


谢谢

一切都很好。你的数据在那里。SQLite就是这样工作的

为了支持ACID事务,在发生崩溃或断电时保证正确存储数据,SQLite首先将数据写入“预写日志”(即
*-wal
文件)。当数据库正确关闭,或者预写日志太满时,SQLite将使用日志的内容更新数据库文件

SQLite在读取时,将首先查阅预写日志,即使多个连接使用同一数据库。日志中的数据仍然是“在数据库中”

SQLite应将日志应用于数据库,作为关闭数据库的一部分。如果没有,您可以运行
PRAGMA wal_checkpoint
手动检查日志文件

由此推论:不要删除
-wal
文件,尤其是在上次使用数据库时没有完全关闭数据库的情况下


有关SQLite中预写日志记录的更多信息,请参见《一切正常》。你的数据在那里。SQLite就是这样工作的

为了支持ACID事务,在发生崩溃或断电时保证正确存储数据,SQLite首先将数据写入“预写日志”(即
*-wal
文件)。当数据库正确关闭,或者预写日志太满时,SQLite将使用日志的内容更新数据库文件

SQLite在读取时,将首先查阅预写日志,即使多个连接使用同一数据库。日志中的数据仍然是“在数据库中”

SQLite应将日志应用于数据库,作为关闭数据库的一部分。如果没有,您可以运行
PRAGMA wal_checkpoint
手动检查日志文件

由此推论:不要删除
-wal
文件,尤其是在上次使用数据库时没有完全关闭数据库的情况下

有关SQLite中预写日志记录的更多信息,请参见