TypeORM索引创建

Kar*_*ler 10 typeorm typeorm-activerecord

是否可以创建具有某些升序/降序字段的唯一索引,以便结果是这样的?

CREATE UNIQUE INDEX "IDX_article_version_latest" ON "public"."article" ("uuid" ASC, "version" DESC, "updatedAt" DESC)
Run Code Online (Sandbox Code Playgroud)

Car*_*ini 8

不幸的是它还不支持。有一个悬而未决的问题

唯一的解决方法是遵循文档

TypeORM 不支持某些索引选项和定义,因为存在许多不同的数据库细节以及获取有关现有数据库索引的信息并自动同步它们的多个问题。在这种情况下,您应该使用您想要的任何索引签名手动创建索引(例如在迁移中)。要使 TypeORM 在同步期间忽略这些索引,请使用装饰器synchronize: false上的选项@Index

在 Article 类中添加@Index装饰器并禁用同步以避免在下一次架构同步时删除:

@Index("IDX_article_version_latest", { synchronize: false })
/* ...*/
class Article { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

创建迁移

export class IndexArticleVersionLatest implements MigrationInterface {
    async up(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`CREATE UNIQUE INDEX "IDX_article_version_latest" ON "public"."article" ("uuid" ASC, "version" DESC, "updatedAt" DESC)`);
    }

    async down(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.query(`DROP INDEX IF EXISTS "IDX_article_version_latest"`);
    }
}
Run Code Online (Sandbox Code Playgroud)

请记住在 TypeORM 配置中注册迁移。参考文档