运行时我有以下迁移文件
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应该恢复内部所有运行的查询
向上()
我说得对吗?
这是因为所有迁移都在事务内部执行,所以回滚应该恢复所有运行的查询,但不幸的是,这并没有发生