代码之家  ›  专栏  ›  技术社区  ›  Abdallah

迁移运行失败时,Typeorm ROLLBACK无法向下执行

  •  0
  • Abdallah  · 技术社区  · 1 年前

    运行时我有以下迁移文件 migration:generate

        public async up(queryRunner: QueryRunner): Promise<void> {
            await queryRunner.query(`
                CREATE TABLE \`users3\` (
                    \`id\` int NOT NULL AUTO_INCREMENT,
                    \`username\` varchar(255) NOT NULL,
                    PRIMARY KEY (\`id\`)
                ) ENGINE = InnoDB
            `);
            await queryRunner.query(`
                CREATE TABLE \`users4\` (
                    \`id\` int NOT NULL AUTO_INCREMENT,
                    \`value\` float(100) NOT NULL,
                    PRIMARY KEY (\`id\`)
                ) ENGINE = InnoDB
            `);
        }
    
        public async down(queryRunner: QueryRunner): Promise<void> {
            await queryRunner.query(`
                DROP TABLE \`users4\`
            `);
            await queryRunner.query(`
                DROP TABLE \`users3\`
            `);
        }
    

    它创建了2个表 users3 & users4 ,当我跑步时 migration:run 命令,它会给出以下内容:

    error: Error: Incorrect column specifier for column 'value'
    query: ROLLBACK
    Error during migration run:
    

    的问题 value users4表中的列类型,所以迁移事务给出ROLLBACK,并且没有向迁移表中添加任何记录,但这里的问题是 用户3 已经创建,所以当我在中解决问题时 用户4 表并再次运行迁移

    error: Error: Table 'users3' already exists
    query: ROLLBACK
    Error during migration run:
    

    我所期待的是,如果之前 移植:运行 命令失败,则回滚正在执行 down 的函数 用户3 哪个是

    DROP TABLE \`users3\`
    

    但这并没有发生,如果 up() 没有完成,那么typeorm应该恢复内部所有运行的查询 向上() 我说得对吗?

    这是因为所有迁移都在事务内部执行,所以回滚应该恢复所有运行的查询,但不幸的是,这并没有发生

    0 回复  |  直到 1 年前