Рассмотрим следующее, где между двумя командами queryRunner.query я хочу сделать некоторую логику для заполнения нового столбца.
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "users" ADD "selectedNotebookId" uuid`);
const userRepo = await queryRunner.connection.getRepository(User);
const allUsers = await userRepo.find({
where: {},
relations: ['notebooks']
});
const bar = new ProgressBar(':bar', { total: allUsers.length });
const promises: Promise<void>[] = allUsers.map((user: User) => {
user.selectedNotebook = user.notebooks[0];
return userRepo.save(user).then(() => {
bar.tick();
});
});
await Promise.all(promises);
await queryRunner.query(
`ALTER TABLE "users" ADD CONSTRAINT "UQ_df4319c3d54b91856514f0dbcb3" UNIQUE ("selectedNotebookId")`
);
await queryRunner.query(
`ALTER TABLE "users" ADD CONSTRAINT "FK_df4319c3d54b91856514f0dbcb3" FOREIGN KEY ("selectedNotebookId") REFERENCES "notebook"("id")`
);
}
Проблема, с которой я сталкиваюсь, заключается в том, что первая ALTER TABLE
Команда блокирует последующий запрос.
Моя проблема в том, что оба оператора обернуты в транзакцию, которую предоставляет среда миграции
Каков наилучший способ обойти это.
Спасибо !!