РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpIxMx 68 of 201 menu
◀ ▶

Индекс в миграции в Nest

На боевом сервере схему не меняют перезапуском с автосинхронизацией: нужен журнал шагов и возможность откатить правку. Индекс тогда создают в миграции, а не декоратором на сущности при старте.

Прямой метод миграции вызывает createIndex с именем таблицы и объектом TableIndex: указывают имя индекса и список колонок. Обратный метод снимает индекс через dropIndex по тому же имени. И в приложении, и в источнике данных для CLI synchronize держат выключенным, чтобы таблицы меняли только команды миграций.

Покажем на примере постов:

import { MigrationInterface, QueryRunner, TableIndex } from 'typeorm'; export class AddPostTitleIndex1730000002000 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise<void> { await queryRunner.createIndex( 'post', new TableIndex({ name: 'IDX_post_title', columnNames: ['title'], }), ); } public async down(queryRunner: QueryRunner): Promise<void> { await queryRunner.dropIndex('post', 'IDX_post_title'); } }

Корень подключает базу без автосинхронизации схемы:

import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { PostsModule } from './posts/posts.module.js'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', host: 'localhost', port: 5432, username: 'postgres', password: 'postgres', database: 'site', autoLoadEntities: true, synchronize: false, }), PostsModule, ], }) export class AppModule {}

Источник данных для CLI повторяет то же правило и указывает каталог шагов:

import { DataSource } from 'typeorm'; export default new DataSource({ type: 'postgres', host: 'localhost', port: 5432, username: 'postgres', password: 'postgres', database: 'site', synchronize: false, entities: ['dist/**/*.entity.js'], migrations: ['dist/migrations/*.js'], });

После сборки проекта выполняют накопившиеся шаги:

npx typeorm migration:run -d dist/data-source.js

Опишите индекс по текстовому полю в AddWorkerTitleIndex через шаг схемы, выключите автосинхронизацию в приложении и источнике данных и выполните накопившиеся шаги для проекта работников.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить