如何从sqlite数据库中检索所有数据?

时间:2017-12-25 13:08:16

标签: linux database bash sqlite

几天前,我一直在使用sqlite3数据库,并注意到删除了大量数据(整个表格(DROP)后),文件大小没有变化(表使用了5MB)。不是我要问的数据库,但也许这与我的问题有关。

我有一堆数据库,我正在使用grep -a查找特定邮件,我成功地发现有问题的数据库大小为50MB,看起来很完美!但是,在sqlite3数据库查看器(或sqlite3命令行工具)中打开数据库仅显示messages表中的800多个条目。当前的自动增量索引高于18.000,这是表应具有的条目数。使用grep浏览.db文件,我想要的一切似乎都在那里,但我猜不出来"隐藏"(?)。

如何从sqlite数据库中检索所有数据?请注意,.dump <table>也不包含我正在寻找的消息。为了快速解释这个以及为什么数据实际上没有删除/文件大小在我删除5MB表时不会缩小我也应该感恩。

sqlite> .dbinfo
database page size:  4096
write format:        1
read format:         1
reserved bytes:      0
file change counter: 366
database page count: 11405
freelist page count: 10372
schema cookie:       2
schema format:       4
default cache size:  0
autovacuum top root: 0
incremental vacuum:  0
text encoding:       1 (utf8)
user version:        7
application id:      0
software version:    3008005
number of tables:    3
number of indexes:   1
number of triggers:  0
number of views:     0
schema size:         737

(请注意,我没有创建也没有编辑过这个数据库,它是Instagram的直接消息数据库。)

1 个答案:

答案 0 :(得分:1)

删除的数据不会立即从数据库文件中删除;见change sqlite file size after "DELETE FROM table"

如空闲列表页数所示,该文件大部分为空,并且运行VACUUM可能会丢弃您正在搜索的数据的剩余部分。

没有简单的方法来恢复已删除的数据(因为缺少一些重要的管理信息)。如果您只对少量数据感兴趣,请尝试使用十六进制编辑器。