gpt4 book ai didi

database - Sqlite3 从转储文件重新创建空数据库

转载 作者:太空狗 更新时间:2023-10-30 01:54:51 24 4
gpt4 key购买 nike

我的 sqlite 数据库有问题。

首先,我的数据库不知何故崩溃了,无论我试图用它做什么,它都说:“数据库磁盘镜像格式错误”。这可能是因为我正在向表格中的两列写入包含大量“\n”的大量文本。

所以我在这里和其他网站上阅读了一些主题,我想转储数据库并重新创建它,但它说“行太长(最多 1000 个字符)”之类的内容 - 现在我无法重新创建它错误。但奇怪的是,我使用的是 3.19.3 版本的 sqlite3,我在这里的另一个线程上看到,在以前的版本中,“\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

*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;

在最近的 SQLite 版本中,您可以使用 .recover command相反。

关于database - Sqlite3 从转储文件重新创建空数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44602759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com