Make share index migration online safe

This commit is contained in:
Ben
2026-06-07 22:13:08 -04:00
parent 3e1c303fa0
commit 78fbf12f8f
@@ -10,7 +10,11 @@ export class AcceptedShareIndex1780862400000 implements MigrationInterface {
await queryRunner.query(` await queryRunner.query(`
SELECT setval( SELECT setval(
'accepted_share_index_seq', 'accepted_share_index_seq',
GREATEST((SELECT COUNT(*) FROM "accepted_share_entity") + 1, 1), GREATEST(
(SELECT COUNT(*) FROM "accepted_share_entity") + 1,
(SELECT COALESCE(MAX("shareIndex"), 0) + 1 FROM "accepted_share_entity"),
1
),
false false
) )
`); `);
@@ -18,28 +22,10 @@ export class AcceptedShareIndex1780862400000 implements MigrationInterface {
ALTER TABLE "accepted_share_entity" ALTER TABLE "accepted_share_entity"
ALTER COLUMN "shareIndex" SET DEFAULT nextval('accepted_share_index_seq') ALTER COLUMN "shareIndex" SET DEFAULT nextval('accepted_share_index_seq')
`); `);
await queryRunner.query(`
WITH ordered AS (
SELECT
"id",
"acceptedAt",
row_number() OVER (ORDER BY "acceptedAt", "id") AS "shareIndex"
FROM "accepted_share_entity"
WHERE "shareIndex" IS NULL
)
UPDATE "accepted_share_entity" AS share
SET "shareIndex" = ordered."shareIndex"
FROM ordered
WHERE share."id" = ordered."id"
AND share."acceptedAt" = ordered."acceptedAt"
`);
await queryRunner.query(`
ALTER TABLE "accepted_share_entity"
ALTER COLUMN "shareIndex" SET NOT NULL
`);
await queryRunner.query(` await queryRunner.query(`
CREATE INDEX IF NOT EXISTS "IDX_accepted_share_order" CREATE INDEX IF NOT EXISTS "IDX_accepted_share_order"
ON "accepted_share_entity" ("shareIndex" DESC) ON "accepted_share_entity" ("shareIndex" DESC)
WHERE "shareIndex" IS NOT NULL
`); `);
} }