Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用TypeORM迁移,如何在迁移期间为列设定种子_Javascript_Postgresql_Typeorm - Fatal编程技术网

Javascript 使用TypeORM迁移,如何在迁移期间为列设定种子

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

考虑以下内容,其中在两个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")`
    );
  }
公共异步启动(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(
启动事务

这为我们创造了一个次交易。注意——这可能只适用于postgreSQL