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

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

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

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

如何从sqlite数据库中检索所有数据?请注意,.dump <table>也不包括我正在寻找的消息。为了快速解释这个以及为什么数据实际上没有被删除/ filesize在我删除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的直接消息数据库。)

linux database bash sqlite
1个回答
1
投票

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

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

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

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