Я использую лучше-sqlite , чтобы вставить ~ 250K строк в виртуальную таблицу FTS5 из существующей таблицы
const insertStmt = db.prepare('INSERT INTO vtbl (a, b, c) VALUES (?, ?, ?)');
const selectStmt = db.prepare('SELECT a, b, c FROM tbl');
const rows = selectStmt.all();
for (let i = 0, j = rows.length; i < j; i++) {
const r = rows[i];
insertStmt.run(r.a, r.b, r.c)
}
Но программа умирает со следующей ошибкой
<--- Last few GCs --->
[6152:0x102803600] 30143 ms: Mark-sweep 1325.4 (1426.1) -> 1325.4 (1426.6) MB, 72.4 / 0.0 ms (average mu = 0.265, current mu = 0.179) allocation failure scavenge might not succeed
[6152:0x102803600] 30226 ms: Mark-sweep 1326.0 (1426.6) -> 1325.9 (1427.6) MB, 72.5 / 0.0 ms (average mu = 0.201, current mu = 0.133) allocation failure scavenge might not succeed
<--- JS stacktrace --->
==== JS stack trace =========================================
0: ExitFrame [pc: 0x6d1fbdbe3d]
Security context: 0x1232b127bbd1 <JSObject>
1: /* anonymous */ [0x12321753bc89] [/Users/punkish/Projects/foo/bin/sq.js:12] [bytecode=0x1232660d5d51 offset=64](this=0x12321753bd81 <Object map = 0x123241e02571>,exports=0x12321753bd81 <Object map = 0x123241e02571>,require=0x12321753bd41 <JSFunction require (sfi = 0x1232660c5fa1)>,module=0x12321753bcf1 <Module map = 0x123241e508b1>,__filename=0x1232...
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
Я также пытался использовать iterator
for (const r of selectStmt.iterate()) {
insertStmt.run(r.a, r.b, r.c)
}
Но я получаю сообщение о том, что a statement is already running so can't run another statement' (I am assuming that the
insertStmt can't be run while the
selectStmt` все еще повторяется.
Итак, как мне решить эту проблему?