fix: try upsert type if it fails

This commit is contained in:
Barış Soner Uşaklı
2026-03-28 14:32:04 -04:00
parent bc5457ef18
commit 988f513655

View File

@@ -27,14 +27,14 @@ DELETE FROM "legacy_object"
AND "expireAt" <= CURRENT_TIMESTAMP`,
});
const res = await db.query({
const res = await tryUpsert(db, {
name: 'ensureLegacyObjectType_upsert',
text: `
INSERT INTO "legacy_object" ("_key", "type")
VALUES ($1::TEXT, $2::TEXT::LEGACY_OBJECT_TYPE)
ON CONFLICT ("_key")
DO UPDATE SET "type" = "legacy_object"."type"
RETURNING "type"`,
INSERT INTO "legacy_object" ("_key", "type")
VALUES ($1::TEXT, $2::TEXT::LEGACY_OBJECT_TYPE)
ON CONFLICT ("_key")
DO UPDATE SET "type" = "legacy_object"."type"
RETURNING "type"`,
values: [key, type],
});
@@ -54,15 +54,15 @@ DELETE FROM "legacy_object"
AND "expireAt" <= CURRENT_TIMESTAMP`,
});
const res = await db.query({
const res = await tryUpsert(db, {
name: 'ensureLegacyObjectsType_upsert',
text: `
INSERT INTO "legacy_object" ("_key", "type")
SELECT k, $2::TEXT::LEGACY_OBJECT_TYPE
FROM UNNEST($1::TEXT[]) k
ON CONFLICT ("_key")
DO UPDATE SET "type" = "legacy_object"."type"
RETURNING "_key", "type"`,
FROM UNNEST($1::TEXT[]) k
ON CONFLICT ("_key")
DO UPDATE SET "type" = "legacy_object"."type"
RETURNING "_key", "type"`,
values: [keys, type],
});
@@ -74,4 +74,18 @@ SELECT k, $2::TEXT::LEGACY_OBJECT_TYPE
}
};
async function tryUpsert(db, queryConfig) {
let res;
try {
res = await db.query(queryConfig);
} catch (err) {
if (err.code === '23505') { // retry if failed due to error: unique constraint
res = await db.query(queryConfig);
} else {
throw err;
}
}
return res;
}
helpers.noop = function () {};