Javascript 使用TypeORM迁移,如何在迁移期间为列设定种子
考虑以下内容,其中在两个queryRunner.query命令之间,我希望执行一些逻辑来为新列种子Javascript 使用TypeORM迁移,如何在迁移期间为列设定种子,javascript,postgresql,typeorm,Javascript,Postgresql,Typeorm,考虑以下内容,其中在两个queryRunner.query命令之间,我希望执行一些逻辑来为新列种子 public async up(queryRunner: QueryRunner): Promise<any> { await queryRunner.query(`ALTER TABLE "users" ADD "selectedNotebookId" uuid`); const userRepo = await queryRunner.connection.g
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")`
);
}
公共异步启动(queryRunner:queryRunner):承诺{
等待queryRunner.query(`ALTER TABLE“users”添加“selectedNotebookId”uuid`);
const userRepo=await queryRunner.connection.getRepository(用户);
const allUsers=wait userRepo.find({
其中:{},
关系:[“笔记本”]
});
常量条=新进度条(':bar',{total:alluser.length});
const promises:Promise[]=allUsers.map((用户:用户)=>{
user.selectedNotebook=user.Notebook[0];
返回userRepo.save(user)。然后(()=>{
bar.tick();
});
});
等待承诺。所有(承诺);
等待queryRunner.query(
`更改表格“用户”添加约束“UQ_df4319c3d54b91856514f0dbcb3”唯一(“selectedNotebookId”)`
);
等待queryRunner.query(
`ALTER TABLE“users”添加约束“FK_df4319c3d54b91856514f0dbcb3”外键(“selectedNotebookId”)引用“笔记本”(“id”)`
);
}
我遇到的问题是,第一个altertable
命令阻止了随后的查询
我的直觉是,问题在于这两条语句都包装在迁移框架提供的事务中
解决这个问题的最佳方法是什么
谢谢 想想看:
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`START TRANSACTION`);
await queryRunner.query(`ALTER TABLE "users" ADD "selectedNotebookId" uuid`);
await queryRunner.query(`COMMIT TRANSACTION`);
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")`
);
}
公共异步启动(queryRunner:queryRunner):承诺{
等待queryRunner.query(`START TRANSACTION`);
等待queryRunner.query(`ALTER TABLE“users”添加“selectedNotebookId”uuid`);
等待queryRunner.query(`COMMIT TRANSACTION`);
const userRepo=await queryRunner.connection.getRepository(用户);
const allUsers=wait userRepo.find({
其中:{},
关系:[“笔记本”]
});
常量条=新进度条(':bar',{total:alluser.length});
const promises:Promise[]=allUsers.map((用户:用户)=>{
user.selectedNotebook=user.Notebook[0];
返回userRepo.save(user)。然后(()=>{
bar.tick();
});
});
等待承诺。所有(承诺);
等待queryRunner.query(
`更改表格“用户”添加约束“UQ_df4319c3d54b91856514f0dbcb3”唯一(“selectedNotebookId”)`
);
等待queryRunner.query(
`ALTER TABLE“users”添加约束“FK_df4319c3d54b91856514f0dbcb3”外键(“selectedNotebookId”)引用“笔记本”(“id”)`
);
}
请注意等待queryRunner.query(
启动事务)包装ALTER TABLE命令的代码>
这为我们创造了一个次交易。注意——这可能只适用于postgreSQL