fix: remove explicit BEGIN/COMMIT to avoid database locked error

sqlx connection pool can dispatch each execute to a different connection,
so BEGIN on one and INSERT on another causes a lock. Sequential inserts
without explicit transaction management avoids this.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Le-King-Fu 2026-02-08 04:13:21 +00:00
parent 88219e657f
commit 764fdad6db

View file

@ -16,35 +16,22 @@ export async function insertBatch(
const db = await getDb();
let insertedCount = 0;
// Process in batches of 500
const batchSize = 500;
for (let i = 0; i < transactions.length; i += batchSize) {
const batch = transactions.slice(i, i + batchSize);
await db.execute("BEGIN TRANSACTION", []);
try {
for (const tx of batch) {
await db.execute(
`INSERT INTO transactions (date, description, amount, source_id, file_id, original_description, category_id, supplier_id)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`,
[
tx.date,
tx.description,
tx.amount,
tx.source_id,
tx.file_id,
tx.original_description,
tx.category_id ?? null,
tx.supplier_id ?? null,
]
);
insertedCount++;
}
await db.execute("COMMIT", []);
} catch (e) {
await db.execute("ROLLBACK", []);
throw e;
}
for (const tx of transactions) {
await db.execute(
`INSERT INTO transactions (date, description, amount, source_id, file_id, original_description, category_id, supplier_id)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`,
[
tx.date,
tx.description,
tx.amount,
tx.source_id,
tx.file_id,
tx.original_description,
tx.category_id ?? null,
tx.supplier_id ?? null,
]
);
insertedCount++;
}
return insertedCount;