summary refs log tree commit diff
path: root/src/database/migration/postgres/1772404321404-InstanceBansIndexes.ts
blob: 05b1e33b575c6ae258428d6646937d07de937bb5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { MigrationInterface, QueryRunner } from "typeorm";

export class InstanceBansIndexes1772404321404 implements MigrationInterface {
    name = "InstanceBansIndexes1772404321404";

    public async up(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`CREATE INDEX instance_bans_user_id_idx ON instance_bans USING HASH (user_id);`);
        await queryRunner.query(`CREATE INDEX instance_bans_fingerprint_idx ON instance_bans USING HASH (fingerprint);`);
        await queryRunner.query(`CREATE INDEX instance_bans_ip_address_idx ON instance_bans USING HASH (ip_address);`);
        // sneaky, sneaky maintenance
        await queryRunner.query(`REINDEX (VERBOSE) TABLE instance_bans;`);
        // escape the transaction for a sec...
        await queryRunner.query(`COMMIT;`);
        await queryRunner.query(`VACUUM (FULL, ANALYZE, VERBOSE) instance_bans;`);
        await queryRunner.query(`BEGIN;`);
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`DROP INDEX instance_bans_user_id_idx;`);
        await queryRunner.query(`DROP INDEX instance_bans_fingerprint_idx;`);
        await queryRunner.query(`DROP INDEX instance_bans_ip_address_idx;`);
    }
}