Norm
dbe2b7611d
Some checks failed
ci/woodpecker/push/lint-foundkey-js Pipeline was successful
ci/woodpecker/push/lint-client Pipeline failed
ci/woodpecker/push/lint-backend Pipeline failed
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/push/lint-sw Pipeline failed
ci/woodpecker/push/test Pipeline failed
This is an optimized version made by Volpeon that should run faster if the instance has a lot of notes. See <https://is-a.wyvern.rip/notes/9habqldl6j> for a comparison of the EXPLAIN ANALYZE of the old and new queries. Co-authored-by: Volpeon <git@volpeon.ink> Reviewed-on: #403
20 lines
942 B
JavaScript
20 lines
942 B
JavaScript
export class removeMentionedRemoteUsersColumn1661376843000 {
|
|
name = 'removeMentionedRemoteUsersColumn1661376843000';
|
|
|
|
async up(queryRunner) {
|
|
await queryRunner.query(`ALTER TABLE "note" DROP COLUMN "mentionedRemoteUsers"`);
|
|
}
|
|
|
|
async down(queryRunner) {
|
|
await queryRunner.query(`ALTER TABLE "note" ADD "mentionedRemoteUsers" TEXT NOT NULL DEFAULT '[]'::text`);
|
|
await queryRunner.query(`CREATE TEMP TABLE IF NOT EXISTS "temp_mentions" AS
|
|
SELECT "id", "url", "uri", "username", "host"
|
|
FROM "user"
|
|
JOIN "user_profile" ON "user"."id" = "user_profile". "userId" WHERE "user"."host" IS NOT NULL`);
|
|
await queryRunner.query(`CREATE UNIQUE INDEX "temp_mentions_id" ON "temp_mentions"("id")`);
|
|
await queryRunner.query(`UPDATE "note" SET "mentionedRemoteUsers" = (
|
|
SELECT COALESCE(json_agg(row_to_json("data")::jsonb - 'id')::text, '[]') FROM "temp_mentions" AS "data"
|
|
WHERE "data"."id" = ANY("note"."mentions")
|
|
)`);
|
|
}
|
|
}
|