mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-05-07 08:06:51 +02:00
fix: try upsert type if it fails
This commit is contained in:
@@ -27,14 +27,14 @@ DELETE FROM "legacy_object"
|
|||||||
AND "expireAt" <= CURRENT_TIMESTAMP`,
|
AND "expireAt" <= CURRENT_TIMESTAMP`,
|
||||||
});
|
});
|
||||||
|
|
||||||
const res = await db.query({
|
const res = await tryUpsert(db, {
|
||||||
name: 'ensureLegacyObjectType_upsert',
|
name: 'ensureLegacyObjectType_upsert',
|
||||||
text: `
|
text: `
|
||||||
INSERT INTO "legacy_object" ("_key", "type")
|
INSERT INTO "legacy_object" ("_key", "type")
|
||||||
VALUES ($1::TEXT, $2::TEXT::LEGACY_OBJECT_TYPE)
|
VALUES ($1::TEXT, $2::TEXT::LEGACY_OBJECT_TYPE)
|
||||||
ON CONFLICT ("_key")
|
ON CONFLICT ("_key")
|
||||||
DO UPDATE SET "type" = "legacy_object"."type"
|
DO UPDATE SET "type" = "legacy_object"."type"
|
||||||
RETURNING "type"`,
|
RETURNING "type"`,
|
||||||
values: [key, type],
|
values: [key, type],
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -54,15 +54,15 @@ DELETE FROM "legacy_object"
|
|||||||
AND "expireAt" <= CURRENT_TIMESTAMP`,
|
AND "expireAt" <= CURRENT_TIMESTAMP`,
|
||||||
});
|
});
|
||||||
|
|
||||||
const res = await db.query({
|
const res = await tryUpsert(db, {
|
||||||
name: 'ensureLegacyObjectsType_upsert',
|
name: 'ensureLegacyObjectsType_upsert',
|
||||||
text: `
|
text: `
|
||||||
INSERT INTO "legacy_object" ("_key", "type")
|
INSERT INTO "legacy_object" ("_key", "type")
|
||||||
SELECT k, $2::TEXT::LEGACY_OBJECT_TYPE
|
SELECT k, $2::TEXT::LEGACY_OBJECT_TYPE
|
||||||
FROM UNNEST($1::TEXT[]) k
|
FROM UNNEST($1::TEXT[]) k
|
||||||
ON CONFLICT ("_key")
|
ON CONFLICT ("_key")
|
||||||
DO UPDATE SET "type" = "legacy_object"."type"
|
DO UPDATE SET "type" = "legacy_object"."type"
|
||||||
RETURNING "_key", "type"`,
|
RETURNING "_key", "type"`,
|
||||||
values: [keys, 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 () {};
|
helpers.noop = function () {};
|
||||||
|
|||||||
Reference in New Issue
Block a user