【发布时间】:2018-10-19 15:26:10
【问题描述】:
考虑以下情况,在两个 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 命令阻止了后续查询。
我的直觉是,这两个语句都包含在迁移框架提供的事务中
解决此问题的最佳方法是什么。
谢谢!!
【问题讨论】:
标签: javascript postgresql typeorm