Sqlite3从转储文件重新创建空数据库
问题描述:
我有一个sqlite数据库的问题。Sqlite3从转储文件重新创建空数据库
首先,我的数据库崩溃了,无论我试图用它做什么,它说:“数据库磁盘映像格式不正确”。这可能是因为我写了大量文本,其中有很多“\ n”表格中的两列。
所以我在这里和其他网站上阅读了几个主题,我倒数据库并重新创建它,但它说类似“该行太长(最多1000个字符)” - 现在我无法重新创建这个错误。但奇怪的是,我正在使用sqlite3的3.19.3版本,并且我在另一个线程上阅读,在以前的版本中,解决了“\ n”字符的问题。
现在我的另一种方法是,我看着转储文件,并使用正则表达式来摆脱所有这些文本。现在我的转储文件将其大小从750 Mb减少到3,5 Mb。当我试图从新的转储文件和旧的(这个大的文件)重新创建数据库时,结果是一个空文件。控制台不会为我提供任何结果或错误。所以下面我发布我在这个过程中的每一步。
sqlite3> .open testDatabase.sqlite
sqlite3> .mode insert
sqlite3> .output dump.sql
sqlite3> .exit
mv testDatabase.sqlite corruptDatabase.sqlite
sqlite3> .open testDatabase.sqlite
sqlite3> .read dump.sql
OR
*gets rid of huge text values*
sqlite3> .open testDatabase.sqlite
sqlite3> .read small_dump.sql
双方造成空testDatabase.sqlite文件。正如我之前提到的,没有错误,所以我不知道发生了什么。
请帮忙,我不知道该怎么办。
答
当.dump
命令遇到损坏的数据库时,它会输出SQL命令(尽可能生成它们),但会输出ROLLBACK命令以防止创建不完整的数据库。
如果你真的想从转储文件得到不完整的数据,编辑从
ROLLBACK; -- due to errors
最后一行改为
COMMIT;
+0
就是这样!非常感谢你 –
是否“空文件”是指0字节? –
是的,确切地说。带有* .journal扩展名的文件在此过程中创建,但随后会自动删除。 –
这应该是不可能的,没有得到一个错误信息。 –