From 203f4cc7ff412dd8df5b806bb7fd572cc55904ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sat, 28 Mar 2026 15:09:03 -0400 Subject: [PATCH] fix: try a save point in retry --- src/database/postgres/helpers.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/database/postgres/helpers.js b/src/database/postgres/helpers.js index 35c41012de..e3df40bad5 100644 --- a/src/database/postgres/helpers.js +++ b/src/database/postgres/helpers.js @@ -45,7 +45,9 @@ DELETE FROM "legacy_object" helpers.ensureLegacyObjectsType = async function (db, keys, type) { keys = [...new Set(keys)]; - + if (!keys.length) { + return; + } await db.query({ name: 'ensureLegacyObjectTypeBefore', text: ` @@ -76,11 +78,18 @@ FROM UNNEST($1::TEXT[]) k async function tryUpsert(db, queryConfig) { let res; + const savepoint = `upsert_${Math.random().toString(36).substring(7)}`; try { + await db.query(`SAVEPOINT ${savepoint}`); res = await db.query(queryConfig); + await db.query(`RELEASE SAVEPOINT ${savepoint}`); } catch (err) { if (err.code === '23505') { // retry if failed due to error: unique constraint + // Roll back to the savepoint to prevent + // error: current transaction is aborted, commands ignored until end of transaction block + await db.query(`ROLLBACK TO SAVEPOINT ${savepoint}`); res = await db.query(queryConfig); + await db.query(`RELEASE SAVEPOINT ${savepoint}`); } else { throw err; }