我正在使用500gb sqlite3数据库(许多行,几列),我正在尝试创建一个新列并用一些值填充它。添加名为<div>
的新列后,我运行了:
+
其中QUOTE_DATE
是表的名称,UPDATE
DATA
SET
QUOTE_DATE = date(QUOTE_DATETIME);
是我通过DATA
函数提取日期的其他列。
我在数据库的一个小得多的(1gb)版本中对此进行了测试,代码运行良好。但是,当我尝试为整个数据库运行此代码时,事情失败了,我最终得到了QUOTE_DATETIME
。
问题:如何解决此问题而无需更新?
详情:此数据库存储在外接硬盘中,一直连接到我的电脑。我的计算机的hd要小得多,无法存储数据库。我直接在外部硬盘上更新数据库。经过date
过程一段时间后,我注意到我的电脑的硬盘开始充满了。它一直充满,直到它完全充满。然后,几分钟后Killed: 9
进程因UPDATE
而停止。
更新
可能的解决方案:此stack为问题提供了一个不错的解决方案:以块的形式更新数据库。这将涉及一些工作,但它是可行的。但是,我仍然想知道为什么sqlite在不应该崩溃的时候崩溃。
可能的解释:似乎SQLite3在更新时创建了一个日志,以防发生不良事件,如电源故障或系统崩溃。该日志用于在下次访问数据库时自动回滚数据库。由于数据库太大,日志文件可能非常大并且占用整个外部硬盘驱动器。可能是SQLite然后移动到下一个可用磁盘并开始在那里写入的情况。当下一个磁盘(我的计算机高清)填满时,系统会终止sqlite进程以避免出现问题。这似乎是合理的,但不太可能,因为我的外置硬盘仍有大约800GB的空间,这似乎足以制作原始数据库的完整副本。