From 7d56920ad577c3941e1bc7e7bfa4d2eaa268e9f6 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Sat, 23 Mar 2024 00:12:01 +0000 Subject: [PATCH] fix pages tsv column index --- apps/server/src/core/page/entities/page.entity.ts | 2 ++ apps/server/src/database/migrations/1711150216801-init.ts | 2 ++ .../database/migrations/1711150345785-AddTSVColumnIndex.ts | 5 +++++ ...svectorTrigger.ts => 1711152548283-AddTsvectorTrigger.ts} | 4 ++-- 4 files changed, 11 insertions(+), 2 deletions(-) rename apps/server/src/database/migrations/{1711150304333-AddTsvectorTrigger.ts => 1711152548283-AddTsvectorTrigger.ts} (89%) diff --git a/apps/server/src/core/page/entities/page.entity.ts b/apps/server/src/core/page/entities/page.entity.ts index 1d22cd08..ea732f43 100644 --- a/apps/server/src/core/page/entities/page.entity.ts +++ b/apps/server/src/core/page/entities/page.entity.ts @@ -8,6 +8,7 @@ import { JoinColumn, OneToMany, DeleteDateColumn, + Index, } from 'typeorm'; import { User } from '../../user/entities/user.entity'; import { Workspace } from '../../workspace/entities/workspace.entity'; @@ -16,6 +17,7 @@ import { PageHistory } from './page-history.entity'; import { Space } from '../../space/entities/space.entity'; @Entity('pages') +@Index(['tsv']) export class Page { @PrimaryGeneratedColumn('uuid') id: string; diff --git a/apps/server/src/database/migrations/1711150216801-init.ts b/apps/server/src/database/migrations/1711150216801-init.ts index 5d3d531a..e6d7fdf4 100644 --- a/apps/server/src/database/migrations/1711150216801-init.ts +++ b/apps/server/src/database/migrations/1711150216801-init.ts @@ -25,6 +25,7 @@ export class Init1711150216801 implements MigrationInterface { await queryRunner.query( `CREATE TABLE "pages" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "title" character varying(500), "icon" character varying, "content" jsonb, "html" text, "textContent" text, "tsv" tsvector, "ydoc" bytea, "slug" character varying, "coverPhoto" character varying, "editor" character varying(255), "shareId" character varying(255), "parentPageId" uuid, "creatorId" uuid NOT NULL, "lastUpdatedById" uuid, "deletedById" uuid, "spaceId" uuid NOT NULL, "workspaceId" uuid NOT NULL, "isLocked" boolean NOT NULL DEFAULT false, "status" character varying(255), "publishedAt" date, "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP, CONSTRAINT "PK_pages" PRIMARY KEY ("id"))`, ); + await queryRunner.query(`CREATE INDEX "IDX_pages_tsv" ON "pages" ("id") `); await queryRunner.query( `CREATE TABLE "users" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "name" character varying(255), "email" character varying(255) NOT NULL, "emailVerifiedAt" TIMESTAMP, "password" character varying NOT NULL, "avatarUrl" character varying, "role" character varying(100), "workspaceId" uuid, "locale" character varying(100), "timezone" character varying(300), "settings" jsonb, "lastLoginAt" TIMESTAMP, "lastLoginIp" character varying(100), "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT "UQ_users_email_workspaceId" UNIQUE ("email", "workspaceId"), CONSTRAINT "PK_users" PRIMARY KEY ("id"))`, ); @@ -259,6 +260,7 @@ export class Init1711150216801 implements MigrationInterface { await queryRunner.query(`DROP TABLE "workspaces"`); await queryRunner.query(`DROP TABLE "users"`); await queryRunner.query(`DROP TABLE "pages"`); + await queryRunner.query(`DROP INDEX IF EXISTS "public"."IDX_pages_id"`); await queryRunner.query(`DROP TABLE "page_history"`); await queryRunner.query(`DROP TABLE "spaces"`); await queryRunner.query(`DROP TABLE "space_members"`); diff --git a/apps/server/src/database/migrations/1711150345785-AddTSVColumnIndex.ts b/apps/server/src/database/migrations/1711150345785-AddTSVColumnIndex.ts index 5ac50bf3..73154bcb 100644 --- a/apps/server/src/database/migrations/1711150345785-AddTSVColumnIndex.ts +++ b/apps/server/src/database/migrations/1711150345785-AddTSVColumnIndex.ts @@ -4,6 +4,11 @@ export class AddTSVColumnIndex1711150345785 implements MigrationInterface { name = 'AddTSVColumnIndex1711150345785'; public async up(queryRunner: QueryRunner): Promise { + // TypeORM entity does not support custom index type + // if we don't set the index on the entity, + // TypeORM will always generate the index here in new migrations + // dropping previous index to recreate using GIN + await queryRunner.query(`DROP INDEX IF EXISTS "IDX_pages_tsv";`); await queryRunner.query( `CREATE INDEX "IDX_pages_tsv" ON pages USING GIN ("tsv");`, ); diff --git a/apps/server/src/database/migrations/1711150304333-AddTsvectorTrigger.ts b/apps/server/src/database/migrations/1711152548283-AddTsvectorTrigger.ts similarity index 89% rename from apps/server/src/database/migrations/1711150304333-AddTsvectorTrigger.ts rename to apps/server/src/database/migrations/1711152548283-AddTsvectorTrigger.ts index e9ffa42f..2ba8133e 100644 --- a/apps/server/src/database/migrations/1711150304333-AddTsvectorTrigger.ts +++ b/apps/server/src/database/migrations/1711152548283-AddTsvectorTrigger.ts @@ -1,7 +1,7 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddTsvectorTrigger1711150304333 implements MigrationInterface { - name = 'AddTsvectorTrigger1711150304333'; +export class AddTsvectorTrigger1711152548283 implements MigrationInterface { + name = 'AddTsvectorTrigger1711152548283'; public async up(queryRunner: QueryRunner): Promise { await queryRunner.query(`